我有一个很长的Python元组t
。我想尽可能有效地抓住指数i1
,i2
,...,iN
从t
的元素。最好的方法是什么?Python元组中有效的多重任意索引访问?
一种方法是:
(1) result = [t[j] for j in (i1, i2, ..., iN)]
但是这似乎导致N个单独查找到的元组。有更快的方法吗?当Python做这样的切片:
(2) result = t[1:M:3]
我假设它不执行M/3单独的查找。 (也许它使用了一个位掩码并执行一次复制操作?)有什么方法可以让我利用Python在(2)中所做的任何操作来使我的任意索引切片发生在单个副本中?
谢谢。
内建序列类型的索引实例是您可以做的最快速的事情之一。在循环中切片的唯一原因是比在循环中自己更有效率,因为它是用C语言编写的,循环以及(甚至是隐含的)调用方法在Python中有更大的开销。此外,如果'i1'到'iN'是相同数字加上某个常数的倍数,则适用于切片的技巧(如果有这样的技巧......您必须以任何方式复制每个项目)。 – delnan
你怎么确定(i1 ... iN)?也许在效率(和简单性)方面有所收获,但只有在更广的范围内重写...... –
这对我来说是一个有趣而令人惊讶的优化。你可以发布一个链接到代码,性能测试和cProfile结果让我们看看吗? –