我有一个清单看起来是这样的:
mylist = [
'Th2 2w, total RNA (linc-sh36)',
'SP CD8, total RNA (replicate 1)',
'DN 2, total RNA (replicate 2)']我想要做的是在该列表中保留与另一个列表匹配的条目:
ctlist = ['DN 1', 'DN 2', 'DN 3', 'DN 4', \
'DP 1', 'DP 2', 'tTreg', 'CD8', 'CD4', 'iTreg']所以最后的输出是产生这样的结果:
SP CD8, total RNA (replicate 1)
DN 2, total RNA (replicate 2)我试过了,但没有产生任何结果:
import re
for mem in mylist:
for ct in ctlist:
regex = re.compile(ct)
match = regex.match(mem)
if match:
print mem正确的方法是什么?
发布于 2015-01-09 07:10:14
主要问题是您忘记了mylist中的逗号。所以你的数据不是你想的那样。尝试添加一些print语句,您可以很容易地在循环中发现这样的问题。
第二个问题是您需要regex.search而不是regex.match,因为您正在尝试匹配整个字符串,而不仅仅是mem的开始。但是,对于所做的工作,您根本不需要正则表达式:
for mem in mylist:
for ct in ctlist:
if ct in mem:
print mem
break发布于 2015-01-09 07:13:14
,在您的mylist值中缺失。
mylist = [
'Th2 2w, total RNA (linc-sh36)',
'SP CD8, total RNA (replicate 1)',
'DN 2, total RNA (replicate 2)']我们可以在代码开始时创建正则表达式模式,然后在for循环中使用。
代码:
mylist = [
'Th2 2w, total RNA (linc-sh36)',
'SP CD8, total RNA (replicate 1)',
'DN 2, total RNA (replicate 2)']
ctlist = ['DN 1', 'DN 2', 'DN 3', 'DN 4', \
'DP 1', 'DP 2', 'tTreg', 'CD8', 'CD4', 'iTreg']
import re
regex = re.compile("|".join(ctlist))
print [ mem for mem in mylist if regex.match(mem)]输出:
python test.py
['DN 2, total RNA (replicate 2)']发布于 2015-01-09 07:15:08
你在这里不需要正则表达式:
>>> mylist
['Th2 2w, total RNA (linc-sh36)', 'SP CD8, total RNA (replicate 1)', 'DN 2, total RNA (replicate 2)']
>>> ctlist
['DN 1', 'DN 2', 'DN 3', 'DN 4', 'DP 1', 'DP 2', 'tTreg', 'CD8', 'CD4', 'iTreg']
>>> [ x for x in mylist for y in ctlist if y in x]
['SP CD8, total RNA (replicate 1)', 'DN 2, total RNA (replicate 2)']https://stackoverflow.com/questions/27855468
复制相似问题