检查列表列表的第一项是否存在于另一列表列表的第一项中

时间:2017-01-28 21:20:48

标签: python list

例如。

让我们考虑这是我的清单

A = [["A1",0],["B1",0],["C1",1],["D1",3]]

这是我想与

比较的列表
B = [["C1",2],["E1",3]]

我如何只比较列表中每个列表的第一个索引?对于前 搜索列表A中任何列表的第一个索引是否存在于列表B内任何列表的第一个索引处?

我想将B中的所有项目插入到A中,这些项目对于任何列表都没有相同的第一个索引。所以我不想插入[" C1",2],因为C1已经存在于列表A中,但[" C1",2]不是,但我不会#&#t; 39;关心第二个指数值。

我希望我能够解释这个问题。

5 个答案:

答案 0 :(得分:1)

我不知道你是否可以选择,但在这里使用词典要容易得多:

A = {"A1":0,"B1":0,"C1":1,"D1":3}
B = {"C1":2,"E1":3}
for B_key in B.keys():
    if not B_key in A.keys():
        A[B_key] = B[B_key]

答案 1 :(得分:0)

我认为没有任何形式的自动化方法,但您可以自己轻松实现。

.csv

答案 2 :(得分:0)

这应该可以解决问题:

A = [["A1",0],["B1",0],["C1",1],["D1",3]]
B = [["C1",2],["E1",3]]

import operator
A_indexes = set(map(operator.itemgetter(0), A)) # Create a set of indexes for O(1) lookup

# Add to A each item that is present in B but not in indexes.
# At the same time, add in indexes.
A.extend(
    A_indexes.add(item[0]) or item for item in B
    if item[0] not in A_indexes) 

到目前为止,这是最有效的解决方案。所有其他都是O(n ^ 2)。

如果您不关心订单,这也是可行的:

A = [["A1",0],["B1",0],["C1",1],["D1",3]]
B = [["C1",2],["E1",3]]

import itertools
A = list(dict(itertools.chain(B, A)).items())

答案 3 :(得分:0)

你可以这样试试,

>>> A = [["A1",0],["B1",0],["C1",1],["D1",3]]
>>> B = [["C1",2],["E1",3]]
>>>
>>> for item in B:
...     if item[0] not in [item_a[0] for item_a in A]:
...             A.append(item)
...
>>> A
[['A1', 0], ['B1', 0], ['C1', 1], ['D1', 3], ['E1', 3]]

答案 4 :(得分:0)

我已经编写了这段代码,它可以工作,但我不认为它是否有效。

for a in range(0, len(A)):
    for b in range(0, len(B)):
        if B[b][0] == A[a][0]:
            print B[b]

此代码的结果是

['C1', 2]