我确定之前已经出现过这个问题,但我找不到一个确切的例子。
我有2个列表,并希望将第二个列表附加到第一个,只有值已经存在。
到目前为止,我有工作代码,但是想知道是否有更好的,更多的“Pythonic”是这样做的:
>>> list1
[1, 2, 3]
>>> list2
[2, 4]
>>> list1.extend([x for x in list2 if x not in list1])
>>> list1
[1, 2, 3, 4]
修改 根据所做的评论,此代码不满足仅添加一次,即:
>>> list1 = [1,2,3]
>>> list2 = [2,4,4,4]
>>> list1.extend([x for x in list2 if x not in list1])
>>> list1
[1, 2, 3, 4, 4, 4]
我最终只会:
[1, 2, 3, 4]
答案 0 :(得分:5)
如果您想维护订单,可以像这样使用collections.OrderedDict
from collections import OrderedDict
from itertools import chain
list1, list2 = [1, 2, 3], [2, 4]
print list(OrderedDict.fromkeys(chain(list1, list2)))
# [1, 2, 3, 4]
如果元素的顺序不重要,您可以使用set
这样的
from itertools import chain
list1, list2 = [1, 2, 3], [2, 4]
print list(set(chain(list1, list2)))
# [1, 2, 3, 4]
答案 1 :(得分:4)
一种方法可能是使用内置类型set
:
list(set(list1).union(list2))
您需要存储操作的结果,如果您想扩展 list1
,那么您可以将其分配给list1
:
list1=list(set(list1).union(list2))
注意:请记住,此方法可能无法保持列表中元素的顺序。
希望这有帮助!