【问题标题】:can't remove some duplicate elements from a list in python无法从python中的列表中删除一些重复的元素
【发布时间】:2021-01-19 11:03:56
【问题描述】:

好吧,我试图从列表中删除重复的项目,以便它具有独特的项目,我也想使用它,如果我的代码运行良好,但在一种情况下我遇到了一些我不明白的事情。这是一个例子:

a = [1,2,2,3,3,3,21,21,16,20,28,28,7]
for x in a:
    if a.count(x) > 1:
        for z in range(a.count(x)):
            a.remove(x)
print(a)
[1, 21, 21, 16, 20, 7]

我不明白为什么!它删除了预测的 2,3,28 但不是 21 ! 任何帮助都会很棒,谢谢。

【问题讨论】:

  • 这是一种奇怪的删除重复项的方法。

标签: python-3.x list duplicates


【解决方案1】:

这种情况的最佳解决方案是使用set()。如果您执行list(set(a)),它将删除所有重复项。
请注意,set()list() 不同,因此如果您想继续使用列表方法,请务必将其转回列表。

关于您的代码,您的代码的问题在于您在更改它时在列表上运行。
当您遍历项目时,索引会发生变化,这就是您错过某些项目的原因。
如果您添加打印以了解 x 的值是什么,您可以更清楚地看到会发生什么:

a = [1,2,2,3,3,3,21,21,16,20,28,28,7]
for x in a:
    print(x)
    if a.count(x) > 1:
        for z in range(a.count(x)):
            a.remove(x)

【讨论】:

  • 是的,你是对的,但我想知道我的问题,感谢您抽出宝贵时间再次回答!
【解决方案2】:

我相信您的问题是您在循环时更改了列表

尝试使用a.copy() 创建列表的新副本以像这样循环。

a = [1,2,2,3,3,3,21,21,16,20,28,28,7]
for x in a.copy():
    if a.count(x) > 1:
        for z in range(a.count(x)):
            a.remove(x)
print(a)

这段代码会输出

[1, 16, 20, 7]

【讨论】:

  • 感谢朋友它有效!顺便说一下,输出是 [1, 16, 20, 7] 是正确的。
  • @TCzCrj 不客气。感谢您对输出的提醒,我现在已经修复了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-14
  • 1970-01-01
  • 1970-01-01
  • 2021-06-21
  • 2018-01-01
  • 1970-01-01
相关资源
最近更新 更多