我有一個很長的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結果讓我們看看嗎? –