0

假设我有两个列表:

x = [1,2,3,4]
y = [1,4,7,8]

我想将 y 中尚未在 x 中的任何值附加到 x。我可以通过循环轻松做到这一点:

for value in y:
    if value not in x:
        x.append(value)

但我想知道是否有更 Pythonic 的方式来做到这一点。

4

4 回答 4

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).

于 2013-05-02T00:57:46.947 回答
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]
于 2013-05-02T01:17:57.193 回答
1

如果您不关心结果的顺序,您可以这样做:

>>> x=[1,2,3,4]
>>> y=[1,4,7,8]
>>> x = list(set(x + y))
>>> x
[1, 2, 3, 4, 7, 8]
于 2013-05-02T01:07:39.493 回答
0
x = [1,2,3,4]
y = [1,4,7,8]

现在我们想将 y 中尚未存在于 x 中的任何值附加到 x。这可以很容易地完成,因为:

temp = [item for item in y if item not in x]
x.extend(temp)

这将首先将所有不在 x 中但存在于 y 中的元素放入一个名为 temp 的列表中。现在我们将扩展列表 x 以包含来自 temp 的元素。希望能帮助到你。

于 2014-09-23T08:48:27.550 回答