gpt4 book ai didi

python - Python 元组中的高效多个任意索引访问?

转载 作者:太空狗 更新时间:2023-10-30 02:05:57 25 4
gpt4 key购买 nike

我有一个很长的 Python 元组 t。我想从 t 中获取索引 i1, i2, ..., iN 的元素同样有效尽可能。什么是最好的方法?

一种方法是:

(1)    result = [t[j] for j in (i1, i2, ..., iN)]

但这似乎会导致对元组进行 N 次单独查找。有没有更快的方法?当 Python 像这样进行切片时:

(2)    result = t[1:M:3]

我假设它不会执行 M/3 次单独查找。 (也许它使用位掩码并执行单个复制操作?)有没有什么方法可以让我利用 Python 在 (2) 中所做的任何事情来使我的任意索引切片发生在单个副本中?

谢谢。

最佳答案

如果你正在做一堆相同的查找,使用 itemgetter 可能是值得的

from operator import itemgetter
mygetter = itemgetter(i1, i2, ..., iN)
for tup in lots_of_tuples:
result = mygetter(tup)

一方面,创建 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

显然,差异将取决于元组的长度、索引的数量等。

关于python - Python 元组中的高效多个任意索引访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7248737/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com