作为一个简单的例子:
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)。OTOHin
在set
O上用作成员资格是O(1),因此它要快得多。
至于您的原始问题,当您执行时for i in list1 and list2
,它将被解释为for i in (list1 and list2)
,并且list1 and list2
如果list1不为空,则list2的值就是list2,因此最终只能遍历第二个列表。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句