将新值附加到python列表

时间:2013-05-02 00:56:34

标签: python list find

假设我有两个清单:

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方式来做这件事。

4 个答案:

答案 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的元素。希望它有所帮助。