如何在Python中的两个列表的交集中选择元素

作为一个简单的例子:

list1 = ['a', 'b', 'c']
list2 = ['a', 'stack', 'overflow']
for i in list1 and list2:
    print i

这会打印list2所有元素。 为什么是这样? 我怎样才能打印这两个列表中的元素?


如果您的列表可能很大,最好将它们转换为集合并使用它们的交集:

list1 = ['a', 'b', 'c']
list2 = ['a', 'stack', 'overflow']

for i in set(list1).intersection(set(list2)):
    print i

如果您想重复地在该交叉点上迭代,请将其保存在自己的变量( intersect = set(list1).intersection(set(list2)) )中。

你也可以使用:

for i in list 1:
    if i in list2:
        print i

但使用的问题in中用于检查成员名单是,它可以是一个O(n)操作,所以整体而言,你的循环变成为O(n ^ 2)。 OTOH,使用in上一set的隶属度为O(1),所以它的速度要快得多。

至于你的原始问题,当你for i in list1 and list2做的时候,它被解释for i in (list1 and list2) ,而列表list1 and list2的值是列表2,如果列表1不是空的,所以你最终迭代仅在第二个列表中。

链接地址: http://www.djcxy.com/p/28109.html

上一篇: How to select elements in the intersection of two lists in Python

下一篇: Find an Exact Tuple Match in a List of Tuples and Return Its Index