我有一个包含点(质心)的列表,其中一些必须删除。
如何在没有循环的情况下执行此操作?我已尝试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]]
答案 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]]