所以当我想从列表中删除一系列索引时,我遇到了麻烦
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[])
我的问题是,如何以一种优雅的方式做到这一点?而不创建另一个列表
答案 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']