我多次调用Python函数,它返回一个列表,其中包含以下任一项:
1)单项
2)多次录入
3)空白列表
例如:
a=['aaaaa']
b=['aaaaa', 'bbbbb', 'ccccc']
c=['aaaaa']
d=['ppppp', 'aaaaa']
e=['aaaaa', 'uuuuu']
现在,我想在所有列表中找到公共字符串。 对于两个列表,我可以这样做:
intercept_list=[val for val in a if val in b]
是否有可能一次性完成多个列表?还假设列表“e”返回一个空列表,我只想忽略它。
谢谢
答案 0 :(得分:2)
您可以使用intersection()
:
>>> set(a).intersection(b, c, d, e)
set(['aaaaa'])
您可以使用list()
将其转换回列表:
result = list(set(a).intersection(b, c, d, e))
答案 1 :(得分:2)
怎么样:
set.intersection(*(set(s) for s in list_of_lists if s))
例如:
>>> a=['aaaaa']
>>> b=['aaaaa', 'bbbbb', 'ccccc']
>>> c=['aaaaa']
>>> d=['ppppp', 'aaaaa']
>>> e=['aaaaa', 'uuuuu']
>>> f=[]
>>> list_of_lists = [a,b,c,d,e,f]
>>> set.intersection(*(set(s) for s in list_of_lists if s))
set(['aaaaa'])
答案 2 :(得分:0)
更通用的实现,计算元素的出现次数并验证计数是否与列表计数匹配
>>> def find_common(*args):
from collections import Counter
from itertools import takewhile, imap
from operator import itemgetter
count = sum(1 for e in args if e)
args = chain.from_iterable(args)
result = map(itemgetter(0),
takewhile(lambda e: e[-1] == count,
Counter(args).most_common()))
return result
>>> find_common(a,b,c,d,e)
['aaaaa']
>>> f = []
>>> find_common(a,b,c,d,e, f)
['aaaaa']