【问题标题】:stop list updating when using del python [duplicate]使用del python时停止更新列表[重复]
【发布时间】:2013-03-26 20:14:09
【问题描述】:

我有一个列表,我想从中删除某些元素 我创建了一个 for 循环,并在这个 for 循环中放入了 del my list[i]

prule 是一个字符串列表,其中包含从0159 它的大小为11154 的字符串等数字。

def getind(li)
    ret = {}
    for i, x in enumerate(li):
        if x not in ret:
            ret[x] = []
        ret[x].append(i)
    return ret
dups = getind(prule)
for n in dups.get('159',[]):
    del rulelines[n]

在这样做list assignment index out of range 一段时间后,我猜这是因为列表已更新。有什么我可以使用的,所以在 for 循环完成之前它不会更新

【问题讨论】:

  • prulerulelines 应该是同一个列表吗?
  • @Schoolboy:我同意以重复的形式关闭,因为在原始答案被接受之前,整件事更适合作为对原始答案的评论。 “过于本地化”也有效。 耸耸肩
  • 为什么在迭代列表时需要删除列表的元素?如果您想要一个仅删除某些元素的列表,您可以为此目的创建一个新列表并将元素附加到它(然后如果需要,然后将其重新绑定到其原始名称),如果您的包含条件很简单,这将更加 Pythonic。如果你想删除元素,因为内存是一个问题,你可以使用生成器来代替。
  • 我同意,我也标记了它.. :)。为什么要耸耸肩??
  • @aestrivex 有 2 个单独的列表...请参阅this 背景问题

标签: python list


【解决方案1】:

您应该向后浏览您的列表:

for x in range(subjectlength - 1, -1, -1):
    del my_list[x]

【讨论】:

【解决方案2】:

正如我在回答 here 中所纠正的那样

dups = getind(prules)
indexes = dups.get('156',[])
rulelines = [rulelines[i] for i in range(len(rulelines[:])) if i not in indexes]

应该能解决你的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-11
    • 2019-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-10
    • 1970-01-01
    • 2017-10-16
    相关资源
    最近更新 更多