在python中,如何获取多个列表中包含的对象列表

时间:2016-06-29 02:53:06

标签: python list

使用python 2.6我基本上有一个列表列表。某些对象在一个或多个列表中是相同的。

我需要获取所有列表中包含的对象列表。

例如:

list1 = ['apple','pear','cheese','grape'] 
list2 = ['grape','carrot','pear','cheese']
list3 = ['apple','cheese','grape']

结果列表需要

['grape','cheese'] 

因为它们是所有3个列表中的唯一对象。

感谢您的帮助!

6 个答案:

答案 0 :(得分:2)

from collections import Counter

a = Counter(list1+list2+list3)

print([x for x in a if a[x]==3])

答案 1 :(得分:1)

您可以像这样使用set运算符:

set(list1) & set(list2) & set(list3)

如果您希望输出list,则可以执行以下操作:

list(set(list1) & set(list2) & set(list3))

答案 2 :(得分:1)

您可以使用sets

list1 = ['apple','pear','cheese','grape'] 
list2 = ['grape','carrot','pear','cheese']
list3 = ['apple','cheese','grape']

print(list(set(list1) & set(list2) & set(list3)))

输出:

['grape', 'cheese']

如果您希望按字母顺序对单词进行排序,您也可以这样做:

print(sorted(set(list1) & set(list2) & set(list3)))

输出:

['cheese', 'grape']

答案 3 :(得分:1)

使用集合和设置交叉点:

>>> list1 = ['apple','pear','cheese','grape'] 
>>> list2 = ['grape','carrot','pear','cheese']
>>> list3 = ['apple','cheese','grape']
>>> list_of_lists = [list1,list2,list3]
>>> reduce(set.intersection,map(set,list_of_lists))
set(['cheese', 'grape'])

答案 4 :(得分:1)

使用set类,它有一些有用的方法,如intersection,可用于操纵类似Euler集的迭代。 以下是概念证明和问题的答案:

list1 = ['apple', 'pear', 'cheese', 'grape'] 
list2 = ['grape', 'carrot', 'pear', 'cheese']
list3 = ['apple', 'cheese', 'grape']
print set(list1) & set(list2) & set(list3)

这将返回一个设置对象,但如果你想要一个列表,只需使用list()方法。

希望你能用它做一些有用的事情或者可能学到新的东西。

您应该在这里阅读以下内容:https://docs.python.org/2/library/stdtypes.html#set

答案 5 :(得分:0)

这个怎么样?

a = [1,2,3,4,8]
b = [4,5,6,7,8]
c = [4,8,9]

print(list(set(a).intersection(b).intersection(c)))

我正在使用intersection(),因为它会在代码中增加更多的可读性,而其他将要使用此代码的人将知道你要做什么。