首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以迭代方式匹配列表中的元素

以迭代方式匹配列表中的元素
EN

Stack Overflow用户
提问于 2015-01-09 07:03:46
回答 4查看 130关注 0票数 0

我有一个清单看起来是这样的:

代码语言:javascript
复制
mylist = [
    'Th2 2w, total RNA (linc-sh36)',
    'SP CD8, total RNA (replicate 1)',
    'DN 2, total RNA (replicate 2)']

我想要做的是在该列表中保留与另一个列表匹配的条目:

代码语言:javascript
复制
ctlist = ['DN 1', 'DN 2', 'DN 3', 'DN 4', \
          'DP 1', 'DP 2', 'tTreg', 'CD8', 'CD4', 'iTreg']

所以最后的输出是产生这样的结果:

代码语言:javascript
复制
 SP CD8, total RNA (replicate 1)
 DN 2, total RNA (replicate 2)

我试过了,但没有产生任何结果:

代码语言:javascript
复制
import re
for mem in mylist:
    for ct in ctlist:
      regex = re.compile(ct)
      match = regex.match(mem)
      if match:
         print mem

正确的方法是什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-01-09 07:10:14

主要问题是您忘记了mylist中的逗号。所以你的数据不是你想的那样。尝试添加一些print语句,您可以很容易地在循环中发现这样的问题。

第二个问题是您需要regex.search而不是regex.match,因为您正在尝试匹配整个字符串,而不仅仅是mem的开始。但是,对于所做的工作,您根本不需要正则表达式:

代码语言:javascript
复制
for mem in mylist:
    for ct in ctlist:
        if ct in mem:
            print mem
            break
票数 2
EN

Stack Overflow用户

发布于 2015-01-09 07:13:14

,在您的mylist值中缺失。

代码语言:javascript
复制
mylist = [
    'Th2 2w, total RNA (linc-sh36)',
    'SP CD8, total RNA (replicate 1)',
    'DN 2, total RNA (replicate 2)']

我们可以在代码开始时创建正则表达式模式,然后在for循环中使用。

代码:

代码语言:javascript
复制
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)]

输出:

代码语言:javascript
复制
python test.py 
['DN 2, total RNA (replicate 2)']
票数 1
EN

Stack Overflow用户

发布于 2015-01-09 07:15:08

你在这里不需要正则表达式:

代码语言:javascript
复制
>>> 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)']
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27855468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档