从列表中删除索引

时间:2014-09-22 15:25:46

标签: python list python-2.7

我面临一个有点令人不安的问题:我有一个列表(例如(2, 5, 7, 3, 8)),我需要删除其中的几个但不是全部。假设我需要删除索引134,我想在循环中执行此操作。无论如何(在Python或逻辑上)都可以在循环中轻松删除这些索引。

如果我有一个列表remIndexes = (1, 3, 4),一旦删除索引1,一切都向下移动一个,所以现在我有(2, 7, 3, 8)和我要删除的数字的索引向下移动一个。

python是否提供了一种巧妙的方法,或者我是否必须订购列表remIndexes,然后返回列表?

注意:remIndexes应该是有序的,但它可能不是有序的。但是,订购并不是很难。

更新:

为什么

lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
for ind, num in enumerate(lst):
    print lst.pop(ind)

实际上工作????? (它在换行符上打印2 4 6 8 0。)

python是否在for循环中冻结列表?

1 个答案:

答案 0 :(得分:1)

迭代反向索引:

>>> lst = [2, 5, 7, 3, 8]
>>> indexes = 1, 3, 4
>>> for i in reversed(indexes):
...     del lst[i]
...
>>> lst
[2, 7]

如果索引未排序,则使用sorted(indexes, reverse=True)


list comprehensionenumerate一起使用:

>>> lst = [2, 5, 7, 3, 8]
>>> indexes = 1, 3, 4
>>> indexes = set(indexes)  # `x in set` is faster than `x in tuple/list`
>>> [x for i, x in enumerate(lst) if i not in indexes]
[2, 7]