dg9*_*g99 4 python tuples slice
我有一个很长的Python元组t.我想抓住元素的索引i1,i2......,iN从t尽可能高效.什么是最好的方式?
一种方法是:
(1) result = [t[j] for j in (i1, i2, ..., iN)]
Run Code Online (Sandbox Code Playgroud)
但这似乎会导致N个单独的查找到元组.有更快的方法吗?当Python做这样的切片时:
(2) result = t[1:M:3]
Run Code Online (Sandbox Code Playgroud)
我假设它不执行M/3单独查找.(也许它使用位掩码并执行单个复制操作?)是否有一些方法可以利用Python中的任何内容(2)使我的任意索引切片在单个副本中发生?
谢谢.
如果您正在进行大量相同的查找,则可能需要使用itemgetter
from operator import itemgetter
mygetter = itemgetter(i1, i2, ..., iN)
for tup in lots_of_tuples:
result = mygetter(tup)
Run Code Online (Sandbox Code Playgroud)
对于一次性,创建itemgetter的开销是不值得的
iPython中的快速测试显示:
In [1]: import random
In [2]: from operator import itemgetter
In [3]: t=tuple(range(1000))
In [4]: idxs = tuple(random.randrange(1000) for i in range(20))
In [5]: timeit [t[i] for i in idxs]
100000 loops, best of 3: 2.09 us per loop
In [6]: mygetter = itemgetter(*idxs)
In [7]: timeit mygetter(t)
1000000 loops, best of 3: 596 ns per loop
Run Code Online (Sandbox Code Playgroud)
显然,差异将取决于元组的长度,索引的数量等.
| 归档时间: |
|
| 查看次数: |
4154 次 |
| 最近记录: |