【问题标题】:Add item to list if not already exists如果不存在,则将项目添加到列表
【发布时间】:2015-08-07 12:48:42
【问题描述】:

我是 Python 新手,遇到以下问题:

a = [[0,abc,1],[0,def,1]]

b = [abc,jkl]

输出应该是:

c = [[0,abc,1],[0,def,1],[0,jkl,1]]

谁能帮帮我?

【问题讨论】:

  • 输入和输出之间的逻辑是什么?

标签: python list compare


【解决方案1】:

可以通过以下代码完成:

In [3]: a = [[0,'abc',1],[0,'def',1]]
In [4]: b = ['abc','jkl']
In [5]: c = a[:]
In [6]: c.extend([[0,e,1] for e in b if e not in [x for _,x,_ in a]])
In [7]: c
Out[8]: [[0, 'abc', 1], [0, 'def', 1], [0, 'jkl', 1]]

希望这会有所帮助!

【讨论】:

  • @VigneshKalai 通过执行 "c = a[:]" 我正在应对 a 到 c。
  • @VigneshKalai 我前段时间编辑过,在你发表评论之前 :)
  • 还有一个初学者问题:“_,x,_”是否意味着:“只看 x,忽略其余部分”??
  • 这个语句 [x for ,x, in a] 循环 a 的每个元素。 a 的每个元素都是三个元素的列表,因此每个元素看起来像 [a,b,c]。由于我唯一感兴趣的元素是中间的元素,我可以写 ,x,,但行为将与写 a,x,c 相同。
【解决方案2】:

这个怎么样?

>>> a = [[0,'abc',1],[0,'def',1]]
>>> b = ['abc','jkl']
>>> c = a[:]
>>> for i in b:
...     if [0,i,1] not in a:
...             c.append([0,i,1])
... 
>>> c
[[0, 'abc', 1], [0, 'def', 1], [0, 'jkl', 1]]

【讨论】:

    【解决方案3】:

    使用not in判断是否包含

    a = [[0,abc,1],[0,def,1]]
    
    b = [abc,jkl]
    
    c = []
    
    for i in a:
        if i not in c:
           c.append(i)
    for j in b:
        if j not in c:
           c.append(j)
    

    【讨论】:

    • 这根本不起作用。您只需将 a 和 b 中的所有项目添加到列表 c。
    猜你喜欢
    • 2020-10-12
    • 2021-07-02
    • 2010-11-01
    • 2022-09-30
    • 1970-01-01
    • 2019-11-23
    • 1970-01-01
    • 2017-12-23
    • 1970-01-01
    相关资源
    最近更新 更多