程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

Python元组中有效的多个任意索引访问?

发布于2019-11-19 21:43     阅读(944)     评论(0)     点赞(13)     收藏(1)


我有一个长长的Python元组t我想抓住在指数中的元素i1i2......,iNt尽可能高效。最好的方法是什么?

一种方法是:

(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

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



所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:https://www.pythonheidong.com/blog/article/161793/980d83f60e46ad472e76/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

13 0
收藏该文
已收藏

评论内容:(最多支持255个字符)