比较两个多维列表的一些问题

时间:2019-02-12 00:29:32

标签: python python-3.x list

感谢看到我的问题。 我设计了一个a_list,如果b_list有一个元素,则擦除b_list中的每个元素。 但是它不能正常工作。它仅适用于a_list [0]。 我的代码中发生了什么?

a_list = [[0, 1], [0, 2]]
b_list = [[0, [0, 1], [0, 2], '3', [0, 4]], ['1', [0,1], [0, 2], [0, 3], '4', [0, 5]]]

for i in b_list:
    for j in a_list:
        temp = [k for k in i if k != j]
    print(temp)

>>> 0, [0, 1], '3', [0, 4]]
    ['1', [0, 1], [0, 3], '4', [0, 5]]

在此结果中,我无法理解为什么[0,1] s在其中!!!!!!

我想要这样的结果

>>> [0, '3', [0, 4]]
>>> ['1', [0, 3], '4', [0, 5]]

PLZ帮帮我。

3 个答案:

答案 0 :(得分:2)

您可以像这样使用嵌套列表理解:

[[i for i in l if i not in a_list] for l in b_list]

这将返回:

[[0, '3', [0, 4]], ['1', [0, 3], '4', [0, 5]]]

答案 1 :(得分:2)

你很近。您可以对not in的元素使用b_list来检查它们在a_list中的存在。

a_list = [[0, 1], [0, 2]]
b_list = [[0, [0, 1], [0, 2], '3', [0, 4]], ['1', [0,1], [0, 2], [0, 3], '4', [0, 5]]]

for i in b_list:
    temp = [j for j in i if j not in a_list]
    print(temp)

# [0, '3', [0, 4]]
# ['1', [0, 3], '4', [0, 5]]

答案 2 :(得分:1)

真正的问题是,每次迭代temp中的项目时,您的代码覆盖 a_list,所以当a_list = [[0, 1], [0, 2]]时,您的temp将仅包含过滤出[0, 2]的结果。这是您的代码的修改:

a_list = [[0, 1], [0, 2]]
b_list = [[0, [0, 1], [0, 2], '3', [0, 4]], ['1', [0,1], [0, 2], [0, 3], '4', [0, 5]]]

for sub_list in b_list:
    temp = []
    for item_b in sub_list:
        not_in_a = True
        for item_a in a_list:
            not_in_a &= item_b != item_a
        if not_in_a:
            temp.append(item_b)
    print(temp)

如果您正在寻找简明的代码,我相信其他答案也可以为您提供帮助。我只是指出您的代码出了什么问题。