【问题标题】:delete list element by index while iterating using python [duplicate]使用python迭代时按索引删除列表元素[重复]
【发布时间】:2016-12-03 03:51:08
【问题描述】:

在列表中,我有想要删除的重复元素。

以下代码不起作用:

注意: temp 包含我要删除的元素的索引列表。

x 是我的清单。

temp = self.list_duplicates(x)
for index in tmp:
   del x[index] 

【问题讨论】:

标签: python list


【解决方案1】:

x.pop(index) 将删除索引处的项目。但是,x = [x[i] for i in range(len(x)) if x[i] not in x[:i]] 会更快地删除重复项。

【讨论】:

  • for i in len(x) 将提升TypeErrorx.pop(index) 会抵消其他索引,所以要小心。
  • 第一个很好,已修复。第二个是正确的,但只要您从列表中间删除一个元素,这就是正确的。
【解决方案2】:

您可以使用以下内容过滤列表:

编辑:现在适用于索引列表

x = list(filter(lambda item: x.index(item) not in temp, x))

【讨论】:

  • temp 是索引列表,而不是项目。
  • 已更正。
【解决方案3】:

没有人回答问题的第一部分。因此,要删除重复项,最好使用set(),它会删除重复项并返回任意唯一项列表。

lst = [1,1,2,3,4,4]
new_lst = list(set(lst))
print(lst)

它将以任意方式返回唯一的元素列表例如:[1,4,2,3]

【讨论】:

    【解决方案4】:

    建立一个带有理解的新列表:

    x = [element for (i,element) in enumerate(x) if i not in temp]
    

    如果您只想删除重复项,即保留​​一份原始副本,则有更好的方法:

    from collections import OrderedDict
    x = list(OrderedDict.fromkeys(x))
    

    【讨论】:

      猜你喜欢
      • 2013-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-18
      • 2020-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多