从列表中删除索引列表

时间:2013-09-07 10:03:22

标签: python list

所以当我想从列表中删除一系列索引时,我遇到了麻烦

    for i in linked_node:
        del l[i]

linked_node是索引序列 这段代码根本不会工作因为del改变了列表的大小

使用for循环,我可以通过将它们附加到新列表

来实现
  l1 = []      
  for i in range(len(l)):
     if i is not in linked_node:
         l1.append(l[])

我的问题是,如何以一种优雅的方式做到这一点?而不创建另一个列表

4 个答案:

答案 0 :(得分:3)

改为使用列表理解:

>>> l = ['hi', 'hello', 'hey', 'hai']
>>> indexes = {1, 2}
>>> [j for i, j in enumerate(l) if i not in indexes]
['hi', 'hai']

答案 1 :(得分:2)

如果您不想像在@Haidro的解决方案中那样创建新列表,但实际上从现有列表中删除了给定索引处的元素,您还可以反转索引列表,以便首先删除列表末尾的索引。

for i in sorted(linked_node, reverse=True):
    del l[i]

否则,您要删除的元素将在删除元素时向左移动,从而更改其索引,最终删除错误的元素或获取IndexError

答案 2 :(得分:1)

你可以这样做:

linked_node.sort(reversed=True)
for i in linked_node:
  del l[i]

现在这应该有效,因为你感兴趣的指数保持不变。 另一种方法,如果它已经分类:

for (x, i) in enumerate(linked_node):
  del l[i - x]

答案 3 :(得分:0)

同样使用反向迭代技巧,但有点快,因为您不必对列表进行排序:

l = ["a", "b", "c", "d"]

for idx in range(len(l)-1, -1, -1):
    i = l[idx]
    print(i)
    if i in ["b", "d", "c"]:
        del(l[idx])
print(l) 

>>> d
>>> c
>>> b
>>> a
>>> ['a']