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

Ala*_*anH 6 python list

作为一个简单的例子:

list1 = ['a', 'b', 'c']
list2 = ['a', 'stack', 'overflow']
for i in list1 and list2:
    print i
Run Code Online (Sandbox Code Playgroud)

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

mu *_*u 無 6

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

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

for i in set(list1).intersection(set(list2)):
    print i
Run Code Online (Sandbox Code Playgroud)

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

你也可以使用:

for i in list 1:
    if i in list2:
        print i
Run Code Online (Sandbox Code Playgroud)

但是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如果list1不为空,则值只是list2,所以你最终只迭代第二个列表.