从Python中的列表中删除索引列表

时间:2015-07-07 11:36:13

标签: python

我有一个包含点(质心)的列表,其中一些必须删除。

如何在没有循环的情况下执行此操作?我已尝试the answer given here,但会显示此错误:

list indices must be integers, not list

我的列表如下所示:

centroids = [[320, 240], [400, 200], [450, 600]]
index = [0,2]

我想删除index中的元素。最终结果将是:

centroids = [[400, 200]]

3 个答案:

答案 0 :(得分:9)

您可以在列表理解中使用enumerate

>>> centroids = [[320, 240], [400, 200], [450, 600]]
>>> index = [0,2]
>>> [element for i,element in enumerate(centroids) if i not in index]
[[400, 200]]

请注意,最后你必须循环遍历列表才能找到特殊索引,没有循环就无法做到这一点。但你可以使用以C语言执行的列表理解,并且比python循环更快(比快2倍)!

另外,为了获得更高的性能,您可以将索引放在具有O(1)的set容器中以检查成员资格。

答案 1 :(得分:3)

这是另一个非常有趣的方式。

 map(centroids.__delitem__, sorted(index, reverse=True))

它实际上会就地删除这些项目。

答案 2 :(得分:0)

你可以使用delete在numpy中完成。

E.g。

 import numpy as np
 centroids = np.array([[320, 240], [400, 200], [450, 600]])
 index = [0,2]
 np.delete(arr, index, 0)

产量

[[400, 200]]