感谢看到我的问题。 我设计了一个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帮帮我。
答案 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)
如果您正在寻找简明的代码,我相信其他答案也可以为您提供帮助。我只是指出您的代码出了什么问题。