使用索引列表从列表中弹出

时间:2017-05-23 14:32:09

标签: python list python-3.x pop

list1 = [1,2,5,6,7,8,10,41,69,78,83,100,105,171]
index_list = [0,4,7,9,10]

如何使用index_list中的索引从list1中弹出一个项目?

output_list = [2,5,6,8,10,69,100,105,17]

4 个答案:

答案 0 :(得分:1)

相反如何:保留列表中的元素:

>>> list1 = [1,2,5,6,7,8,10,41,69,78,83,100,105,171]
>>> index_list = [0,4,7,9,10]
>>> index_set = set(index_list) # optional but faster    
>>> [x for i, x in enumerate(list1) if i not in index_set]
[2, 5, 6, 8, 10, 69, 100, 105, 171]

注意:这不会修改现有列表,但会创建一个新列表。

答案 1 :(得分:0)

使用list.remove(item)

for n in reversed(index_list):
    list1.remove(list1[n])

或list.pop(index)

for n in reversed(index_list):
    list1.pop(n)

这两种方法都在这里描述https://docs.python.org/2/tutorial/datastructures.html

在index_list上使用reversed()(假设索引总是按照您显示的情况排序),因此您从列表末尾删除项目,它应该可以正常工作。

答案 2 :(得分:0)

你可以试试这个 -

for index in sorted(index_list, reverse=True):
    list1.pop(index)

print (list1)

pop()有一个可选的参数索引。它将删除索引

中的元素

答案 3 :(得分:0)

list1 = [1,2,5,6,7,8,10,41,69,78,83,100,105,171]
index_list = [0,4,7,9,10]


print([ t[1] for t in enumerate(list1) if t[0] not in index_list])
  

RESULT

     

[2,5,6,8,10,69,100,105,171]

枚举将创建如下所示的结构。

[(0, 1), (1, 2),(2, 5),(3, 6),(4, 7),(5, 8),...(13, 171)]

Where t = (0,1) (index,item)
t[0] = index
t[1] = item