【发布时间】:2020-06-05 05:12:00
【问题描述】:
我正在编写一个从列表中删除重复元素的代码。重复顺序可以不同,但我仍然认为两者相同。
例如,我会考虑使用 [[m, b], [c, d]] 和 [[c, d], [m, b]] 去重复。
我正在编写一个可以将这些识别为重复的代码,并从整个列表中删除多余的部分。到目前为止,我在一个没有任何重复项的列表上进行了尝试,因此最终列表应该保持不变。
这是列表,
A= [[[a1, b1], [a1, b1]],
[[a2, b2], [a2, b2]],
[[a3, b3], [a3, b3]],
[[a4, b4], [a4, b4]]]
我使用的代码是,
for i in A:
for j in A:
if j[1]== i[0]:
if j[0]==i[1]:
A.remove(j)
我希望代码将给定内部列表 (j[1]) 中的第二个元素与其他内部列表之一 (i[0]) 中的第一个元素进行比较,对于 j[0] 和 i[1 ],如果它们相等(即 i 和 j 彼此重复),则从列表中删除其中一个元素。
问题在于,使用此代码,输出不应与起始列表 (A) 不同,但结果是这样,
[[[a2, b2], [a2, b2]], [[a4, b4], [a4, b4]]]
我只是在寻找有关为什么会发生这种情况以及如何更改我的代码以避免问题的输入。
【问题讨论】:
-
在迭代列表时不要从列表中删除项目。
-
我不确定我是否理解?代码不是要求只删除满足条件的元素吗?
-
循环条件
for i in A在循环开始时被评估一次。此时,代码“记住”了列表中的所有元素。但是如果你从循环内的列表中删除元素,那么列表的实际状态就会与“记住”的状态不同步,就会发生不好的事情。 -
您需要一些方法来确保
i和j不是同一个项目。例如,在第一次内部循环迭代中,i和j都是[[a1, b1], [a1, b1]],因为它们是同一个项目,因此该项目被删除。 -
也许是
if i is j: continue?
标签: python list duplicates