2024-04-27 00:43:34 发布
网友
Possible Duplicate:Common elements comparison between 2 lists
我有两个清单:
[Apples, Bananas, Pears] [Kiwis, Bananas, Apples]
我只想得到两个列表共享的元素。在python中必须有一些内置函数。在
结果:
>>> set(["Apples", "Bananas", "Pears"]).intersection(["Kiwis", "Bananas", "Apples"]) set(['Bananas', 'Apples']) >>> list(_) ['Bananas', 'Apples']
相当于:
原始答案:
[x for x in list1 if x in list2]
针对有关维护秩序的评论问题:
这个列表理解只是
有了这个扩展版本,就更容易看到发生了什么。输出列表正好是list1,删除了list2中的元素。因此它将保留list1的顺序。例如,如果list1 = [1,2,3]和list2 = [3,2,5],则列表理解的输出将是[2,3]。如果列表的位置像这样颠倒
list1
list2
list1 = [1,2,3]
list2 = [3,2,5]
[2,3]
[x for x in list2 if x in list1]
然后在输出中保留list2的顺序,给我们[3,2]。在
[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解决方案更好,因为它更有效,而且通常您不需要重复的元素。然而,如果你想维持秩序,这是一个办法。(如果您希望保持顺序而不存在重复项,则可以使用此方法,然后根据您希望保留先前的副本还是后面的副本来剥离重复项。)
相当于:
^{pr2}$原始答案:
针对有关维护秩序的评论问题:
这个列表理解只是
^{pr2}$有了这个扩展版本,就更容易看到发生了什么。输出列表正好是
list1
,删除了list2
中的元素。因此它将保留list1
的顺序。例如,如果list1 = [1,2,3]
和list2 = [3,2,5]
,则列表理解的输出将是[2,3]
。如果列表的位置像这样颠倒然后在输出中保留
list2
的顺序,给我们[3,2]
。在另外,在可能不受欢迎的副作用中,这意味着此方法将包含
list1
的重复元素。例如:对于你的例子,会发生这样的情况:
但如果列表被翻转,则输出将反转:
所以,一般来说,sets解决方案更好,因为它更有效,而且通常您不需要重复的元素。然而,如果你想维持秩序,这是一个办法。(如果您希望保持顺序而不存在重复项,则可以使用此方法,然后根据您希望保留先前的副本还是后面的副本来剥离重复项。)
相关问题 更多 >
编程相关推荐