如何在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不是空的,所以你最终迭代仅在第二个列表中。
上一篇: 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