蟒蛇:搜索在一个列表中的字符串在另一个列表,然后追加一个完整的列表条目到一个新的列表

问题描述:

例子:蟒蛇:搜索在一个列表中的字符串在另一个列表,然后追加一个完整的列表条目到一个新的列表

L1=['cat', 'dog', 'fish', 'bird', 'rabbit', 'horse'] 

L2=[('cat', 'a', 'b', 'c'), ('cat', 'c', 'd', 'e'), ('cat', 'e', 'f', 'g'), ('fish', 'x', 'y', 'z'), ('dog', 'w', 'x', 'y'), ('dog', 'z', 'y', 'x'), ('horse', '1', '2', '3'), ('monkey', 'a', 'b', 'c'), ('kitten', 'h', 'i', 'j'), ('bird', '4', '5', '6')] 

我试图寻找在L2在L1的字符串,因此,如果字符串在L1存在于L2的任何部分中时,来自L2 "('cat, a, b, c')"的整个条目被附加到新列表。我也认为可能删除没有任何字符串的任何部分的条目将起作用。 我试过了:

def searcher(L1, L2): 
    common = [] 
    for x in L1: 
     if re.search(x, L2): 
      common.append(L2) 

    return common 

但是没有奏效。 我使用的实际列表要长得多,所以一个高效的代码真的会帮助我。

谢谢!

+0

为什么`L2`串周围的括号?他们什么都不做。 – 2011-01-24 18:08:09

+0

或者你是否真的指L2的第一个条目是'('cat','a','b','c')`? – 2011-01-24 18:09:40

尝试

s = set(L1) 
new_list = [a for a in L2 if any(b in s for b in a)] 

也许

s = set(L1) 
new_list = [a for a in L2 if s.intersection([w.strip() for w in set(a.split(","))])]