Ste*_*ken 6 python indexing list
所以我想知道如何使用Python 2.7,最有效地获取用于表示这样的索引的值列表:(但长度最多为250,000+)
indices = [2, 4, 5]
Run Code Online (Sandbox Code Playgroud)
并从更大的列表中删除索引列表,如下所示:(3,000,000多项)
numbers = [2, 6, 12, 20, 24, 40, 42, 51]
Run Code Online (Sandbox Code Playgroud)
得到这样的结果:
[2, 6, 20, 42, 51]
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种有效的解决方案.我知道有很多方法可以做到这一点,但这不是我的问题.效率是.此外,此操作必须多次完成,列表将以指数方式变小.我没有一个等式来表示它们随着时间的推移会变小多少.
编辑:
数字必须在整个时间内保持在列表中排序,或者在删除索引后返回到排序.名为indices的列表可以排序也可以不排序.它甚至不必在列表中.
您可能需要考虑使用numpy库来提高效率(如果您处理整数列表可能不是一个坏主意):
>>> import numpy as np
>>> a = np.array([2, 6, 12, 20, 24, 40, 42, 51])
>>> np.delete(a, [2,4,5])
array([ 2, 6, 20, 42, 51])
Run Code Online (Sandbox Code Playgroud)
备注np.delete:http://docs.scipy.org/doc/numpy/reference/generated/numpy.delete.html
考虑保持主阵列不变也是值得的,但是维护一个蒙面阵列(虽然没有对它进行过任何速度测试......)
我怀疑在索引之间取整个切片可能比列表理解更快
def remove_indices(numbers, indices):
result = []
i=0
for j in sorted(indices):
result += numbers[i:j]
i = j+1
result += numbers[i:]
return result
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
183 次 |
| 最近记录: |