如何获得两个相同的python列表的元素?

2024-04-27 00:43:34 发布

您现在位置:Python中文网/ 问答频道 /正文

Possible Duplicate:
Common elements comparison between 2 lists

我有两个清单:

[Apples, Bananas, Pears]
[Kiwis, Bananas, Apples]

我只想得到两个列表共享的元素。在python中必须有一些内置函数。在

结果:

^{pr2}$

Tags: 函数元素列表elementscommonbetween内置lists
2条回答
>>> set(["Apples", "Bananas", "Pears"]).intersection(["Kiwis", "Bananas", "Apples"])
set(['Bananas', 'Apples'])
>>> list(_)
['Bananas', 'Apples']

相当于:

^{pr2}$

原始答案:

[x for x in list1 if x in list2]

针对有关维护秩序的评论问题:

这个列表理解只是

^{pr2}$

有了这个扩展版本,就更容易看到发生了什么。输出列表正好是list1,删除了list2中的元素。因此它将保留list1的顺序。例如,如果list1 = [1,2,3]list2 = [3,2,5],则列表理解的输出将是[2,3]。如果列表的位置像这样颠倒

[x for x in list2 if x in list1]

然后在输出中保留list2的顺序,给我们[3,2]。在

另外,在可能不受欢迎的副作用中,这意味着此方法将包含list1的重复元素。例如:

>>> [x for x in [1,2,3,3,3] if x in [2,3]]
[2, 3, 3, 3]

对于你的例子,会发生这样的情况:

>>> [fruit for fruit in ["Apples", "Bananas", "Pears"] if fruit in ["Kiwis", "Bananas", "Apples"]]
['Apples', 'Bananas']

但如果列表被翻转,则输出将反转:

>>> [fruit for fruit in ["Kiwis", "Bananas", "Apples"] if fruit in ["Apples", "Bananas", "Pears"]]
['Bananas', 'Apples']

所以,一般来说,sets解决方案更好,因为它更有效,而且通常您不需要重复的元素。然而,如果你想维持秩序,这是一个办法。(如果您希望保持顺序而不存在重复项,则可以使用此方法,然后根据您希望保留先前的副本还是后面的副本来剥离重复项。)

相关问题 更多 >