作为一个简单的例子:
list1 = ['a', 'b', 'c']
list2 = ['a', 'stack', 'overflow']
for i in list1 and list2:
print i
这将打印list2
中的所有元素。为什么是这样?我怎样才能打印两个列表中的元素?
答案 0 :(得分:6)
如果您的列表可能很大,最好将它们转换为集合并使用它们的交叉点:
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不为空,则list1 and list2
的值只是list2,因此您最终仅迭代第二个列表。