How to select elements in the intersection of two lists in Python

As a quick example:

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

this prints all the elements in list2 . Why is this? How can I just print the elements that are in both lists?


If your lists can be big, its better to convert them to sets and use intersection over them:

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

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

In case you want to iterate on that intersection repetitively, save it in a variable of its own ( intersect = set(list1).intersection(set(list2)) ).

You could also use:

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

but the problem of using in in a list for checking membership is that it can be an O(n) operation, so overall, your loop becomes O(n^2). OTOH, using in on a set for membership is O(1), so it is much faster.

As for your original question, when you do for i in list1 and list2 , it is interpreted as for i in (list1 and list2) , and the value of list1 and list2 is simply list2 if list1 is not empty, so you end up iterating over the second list only.

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

上一篇: 如何获得Python中'in'语句的索引

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