查找列表条目Python的共同点

时间:2014-01-17 16:47:13

标签: python list

我多次调用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”返回一个空列表,我只想忽略它。

谢谢

3 个答案:

答案 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']