有条件地附加列表的最佳Pythonic方式

时间:2014-03-06 13:39:04

标签: python list-comprehension

我确定之前已经出现过这个问题,但我找不到一个确切的例子。

我有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]

2 个答案:

答案 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))

注意:请记住,此方法可能无法保持列表中元素的顺序。

希望这有帮助!