python迭代列表以删除项的索引

时间:2016-11-01 00:38:47

标签: python list loops pop

我有2个名单:

l1=[(1,2),(3,4),(5,6)]
l2 = [0,2]

l2包含索引列表。我想删除l1中与l2中的索引相对应的元素的索引。

怎么办呢?

for i in l2:
    l2.pop(i)

不起作用,因为弹出第一个后索引会发生变化。

我在某个地方看到了这个答案,但它没有通过删除索引来实现:

somelist = [x for x in somelist if not determine(x)]

3 个答案:

答案 0 :(得分:3)

l2 = set(l2)   # for speedy lookups
l1 = [x for i, x in enumerate(l1) if i not in l2]

答案 1 :(得分:1)

您始终可以先对索引列表进行排序,然后反向迭代它们,以确保删除正确的值

for i in sorted(l2)[::-1]: l1.pop(i)

答案 2 :(得分:1)

你可以按相反的顺序来避免这个问题:

l1 = [(1, 2), (3, 4), (5, 6)]
l2 = [0, 2]

for i in reversed(l2):
    del l1[i]
print l1 # [(3, 4)]