我有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)]
答案 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)]