我有以下问题:
list1=['xyz','xyz2','other_randoms']
list2=['xyz']
我需要找出list2的哪些元素在list1中。事实上,list1的元素对应于一个数值,我需要得到这个数值,然后进行更改。问题是'xyz2'包含'xyz',因此也与正则表达式匹配。你知道吗
到目前为止,我的代码(其中'data'是一个python字典,'specie\u name\u和\u initial\u values'是一个列表列表,其中每个子列表包含两个元素,第一个是specie name,第二个是与其相应的数值):
all_keys = list(data.keys())
for i in range(len(all_keys)):
if all_keys[i]!='Time':
#print all_keys[i]
pattern = re.compile(all_keys[i])
for j in range(len(specie_name_and_initial_values)):
print re.findall(pattern,specie_name_and_initial_values[j][0])
我尝试过的正则表达式的变体包括:
pattern = re.compile('^'+all_keys[i]+'$')
pattern = re.compile('^'+all_keys[i])
pattern = re.compile(all_keys[i]+'$')
我也尝试过使用'in'作为限定符(即在for循环中)
任何帮助都将不胜感激。谢谢
西亚兰
----------编辑----------------
澄清。我现在的代码如下。它在类/方法结构中使用。你知道吗
def calculate_relative_data_based_on_initial_values(self,copasi_file,xlsx_data_file,data_type='fold_change',time='seconds'):
copasi_tool = MineParamEstTools()
data=pandas.io.excel.read_excel(xlsx_data_file,header=0)
#uses custom class and method to get the list of lists from a file
specie_name_and_initial_values = copasi_tool.get_copasi_initial_values(copasi_file)
if time=='minutes':
data['Time']=data['Time']*60
elif time=='hour':
data['Time']=data['Time']*3600
elif time=='seconds':
print 'Time is already in seconds.'
else:
print 'Not a valid time unit'
all_keys = list(data.keys())
species=[]
for i in range(len(specie_name_and_initial_values)):
species.append(specie_name_and_initial_values[i][0])
for i in range(len(all_keys)):
for j in range(len(specie_name_and_initial_values)):
if all_keys[i] in species[j]:
print all_keys[i]
从熊猫回来的桌子就像一本字典。我需要转到我的数据表,提取头(即all\u keys位),然后在specie\u name和\u initial\u values变量中查找头的名称,并获得相应的值(specie\u name和\u initial\u value变量中的第二个元素)。之后,我将数据表的所有值乘以为每个匹配元素获得的值。你知道吗
我很可能把事情复杂化了。你有更好的解决办法吗?你知道吗
谢谢
-----------编辑2-----------
好的,下面是我的变量
所有密钥=设置([u'Cyp26\u G\u R1',u'Cyp26\u G\u rep1',u'Time'])
物种=物种=集合([“[Cyp26\U R1R2\U rArararararara,“[Cyp26\U rCr3\U 1]、“[18-OH-RA]、“[p38\U a]、“[p38\U a]、“[Cyp26\U rArrR2\U rArArArara”、、“[Cyp26\U rrR2\U rRa rC 3\U 1 1]、、、、“[18-OH-RA]、、、、“[18-OH-OH-RA]、、、、、、、“[p38-a]、、、、、、、、、、“[P326\Cyp26\U U U U rep1]、“、、、、“、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、Ser369p]'、'[p38]、'[Cyp26-u-mRNA]、'[Cyp26-u-G-u-L]、'[tfiiih]、'[Cyp26-u-SRC3-u-2],“[Cyp26\u G\u R1R2]”、“[MSK1]”、“[MSK1\u a]”、“[Cyp26\u G]”、“[Basal\u Kinases]”、“[Cyp26\u R1\u RARa]”、“[4-OH-RA]”、“[Cyp26\u G\u rep2]”、“[Cyp26\u Chromatin]”、“[Cyp26\u G\u R1]”、“[RXR]”、“[SMRT]”)
您不需要正则表达式来查找公共元素,set.intersection将查找list2中也在list1中的所有元素:
另外,如果您想比较
'xyz'
和'xyz2'
,您可以使用==
notin,然后它将正确地返回False。你知道吗您还可以更简洁地重写自己的代码:
根据您的编辑,您设法将列表转换为字符串,其中一个选项是剥离
[]
:输出:
仅供参考,如果您在集合中有列表,您会得到一个错误,因为列表是可变的,所以不能散列。你知道吗
相关问题 更多 >
编程相关推荐