有条件附加列表的最佳Python方式
我肯定这个问题以前提过,但我找不到确切的例子 我有两个列表,希望将第二个列表附加到第一个列表,只有一个值不在那里 到目前为止,我已经有了可用的代码,但我想知道是否有更好的、更“Pythonic”的方法可以做到这一点:有条件附加列表的最佳Python方式,python,list-comprehension,Python,List Comprehension,我肯定这个问题以前提过,但我找不到确切的例子 我有两个列表,希望将第二个列表附加到第一个列表,只有一个值不在那里 到目前为止,我已经有了可用的代码,但我想知道是否有更好的、更“Pythonic”的方法可以做到这一点: >>> list1 [1, 2, 3] >>> list2 [2, 4] >>> list1.extend([x for x in list2 if x not in list1]) >>> list1 [1,
>>> 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]
一种方法是使用内置类型: 您需要存储操作结果,如果要扩展
list1
,则可以将其分配给list1
:
list1=list(set(list1).union(list2))
注意:请记住,这种方法可能无法保持列表中元素的顺序
希望这有帮助 如果您想维持订单,可以这样使用
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]
from itertools import chain
list1, list2 = [1, 2, 3], [2, 4]
print list(set(chain(list1, list2)))
# [1, 2, 3, 4]
如果元素的顺序不重要,您可以像这样使用集合
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]
from itertools import chain
list1, list2 = [1, 2, 3], [2, 4]
print list(set(chain(list1, list2)))
# [1, 2, 3, 4]
通常,您会使用集合来维护唯一的值。元素的顺序重要吗?如果
list2
是[2,4,4]
?如果list1
是[1,1,2,3]
和list2
是[2,4,4]
,预期的输出是什么?可能重复的列表(set(list1).union(list2))
将避免构建中间列表对象。实际答案是:list1=list(set(list1)。union(list2))@PauloBu:set(list1+list2)
构建中间列表对象,set(list1)。union(list2)
构建中间集合对象,但会更小。@ardochigh在勾选答案之前,请检查这个答案的输出是否对您有利,如果输入是list1,list2=[100200300],[200400]
@ardochigh-Oh-than-ok:)那么这是您能得到的最好的解决方案:)如果顺序重要,请检查我的答案。list(orderedict.fromkeys(chain(list1,list2))
在Python 2.x和Python 3.x中都能工作。