9

我试图找到一种简单的方法来做到这一点:

list1 = ['little','blue','widget']
list2 = ['there','is','a','little','blue','cup','on','the','table']

我想获得两个列表的共同元素,而 list1 的顺序保持不变,所以这个结果是预期的。

list3 = ['little','blue']

我在用

list3 = list(set(list1)&set(list2))

但是,这只会返回list3 = ['blue', 'little'],显然, set() 只是忽略顺序。

4

4 回答 4

10

你快到了,只是list3根据排序list1

list1 = ['little','blue','widget']
list2 = ['there','is','a','little','blue','cup','on','the','table']

list3 = set(list1)&set(list2) # we don't need to list3 to actually be a list

list4 = sorted(list3, key = lambda k : list1.index(k))

结果:

>>> list4
['little', 'blue']
于 2013-08-16T01:48:47.173 回答
6

使用列表理解:

>>> list1 = ['little','blue','widget']
>>> list2 = ['there','is','a','little','blue','cup','on','the','table']
>>> s = set(list2)
>>> list3 = [x for x in list1 if x in s]
>>> list3
['little', 'blue']
于 2013-08-16T01:35:31.203 回答
0

这是使用过滤器的实现:

list1 = ['little','blue','widget']
list2 = ['there','is','a','little','blue','cup','on','the','table']
set2 = set(list2)
f = lambda x:x in set2

list3 = filter(f, list1)
于 2013-08-16T01:35:43.220 回答
0

这可以满足您使用 python 2.7 的要求,虽然不是特别优雅,但它确实回答了您的问题。

list1 = ['little','blue','widget']
list2 = ['there','is','a','little','blue','cup','on','the','table']
list3 = []
for l1 in list1:
    for l2 in list2:
        if l2 == l1:
            list3.append(l2)

print list3  # ['little', 'blue']
于 2013-08-16T01:40:01.827 回答