假设我有两个清单:
x = [1,2,3,4]
y = [1,4,7,8]
我想将x中任何尚未包含在x中的值附加到x。我可以通过循环轻松完成这项工作:
for value in y:
if value not in x:
x.append(value)
但我想知道是否有更多的Pythonic方式来做这件事。
答案 0 :(得分:5)
这样的事情:
In [22]: x = [1,2,3,4]
In [23]: y = [1,4,7,8]
In [24]: x += [ item for item in y if item not in x]
In [25]: x
Out[25]: [1, 2, 3, 4, 7, 8]
+=
充当list.extend
,因此上述代码相当于:
In [26]: x = [1,2,3,4]
In [27]: lis = [ item for item in y if item not in x]
In [28]: x.extend(lis)
In [29]: x
Out[29]: [1, 2, 3, 4, 7, 8]
请注意,如果列表
x
的大小很大,而您的列表包含x / y 只有不可变(可散列)的项目,你必须在这里使用sets
将时间复杂度提高到O(N)
。
答案 1 :(得分:2)
>>> x = [1,2,3,4]
>>> y = [1,4,7,8]
>>> set_x = set(x) # for fast O(1) amortized lookup
>>> x.extend(el for el in y if el not in set_x)
>>> x
[1, 2, 3, 4, 7, 8]
答案 2 :(得分:1)
如果你不关心结果的顺序,你可以这样做:
>>> x=[1,2,3,4]
>>> y=[1,4,7,8]
>>> x = list(set(x + y))
>>> x
[1, 2, 3, 4, 7, 8]
答案 3 :(得分:0)
x = [1,2,3,4]
y = [1,4,7,8]
现在我们要向x中附加x中尚未包含的任何值。这可以很容易地完成:
temp = [item for item in y if item not in x]
x.extend(temp)
这将首先将所有不在x中的元素放在名为temp的列表中的y中。现在我们将扩展列表x以包含来自temp的元素。希望它有所帮助。