python 索引操作_为python列表链接多个索引操作的最快方法

这篇博客探讨了在Python中对列表进行多级索引操作的不同方法,包括使用`reduce`、for循环和手动索引。通过性能测试,发现手动索引通常比使用`reduce`或for循环更快,但在代码简洁性和灵活性之间需要权衡。测试结果显示,手动索引的执行时间最短。

我只需要使用python内置的^{}来实现这一点,它看起来并不复杂,在我的测试中也没有那么慢:from itertools import product

for x in product(range(3), range(2)):

rg = reduce(lambda result, index: result[index], x, lst)

value = rg[0]

如果您担心来自reduce的计时惩罚,您可以使用for循环来代替:

^{pr2}$

在所有情况下,这将比手动索引慢,因为for循环将需要额外的操作来确定停止条件。问题是,与以往一样,速度优化是否值得您为任意深度规范的灵活性。在

至于为什么要使用reduce与for,JavaScript社区中存在一个持续的风格争论,即是否应该在Array上使用reduce、map、filter函数,还是使用{}循环版本,因为这样更快,您可能需要参考这一争论来选择属于哪一方。在

使用for循环计时:In [22]: stmt = '''

...: from itertools import product

...: def go():

...: lst = [[[1], [2]], [[3, 3], [4]], [[5], [6,6,6]]]

...: for x in product(range(3), range(2)):

...: # rg = reduce(lambda result, index: result[index], x, lst)

...: value = lst

...: for index in x:

...: value = value[index]

...: value = value[0]

...: # value = lst[x[0]][x[1]][0]

...: '''

In [23]: timeit(setup=stmt, stmt='go()', number=1000000)

Out[23]: 4.003296852111816

使用reduce计时:In [18]: stmt = '''

...: from itertools import product

...: def go():

...: lst = [[[1], [2]], [[3, 3], [4]], [[5], [6,6,6]]]

...: for x in product(range(3), range(2)):

...: rg = reduce(lambda result, index: result[index], x, lst)

...: value = rg[0]

...: # value = lst[x[0]][x[1]][0]

...: '''

In [19]: timeit(setup=stmt, stmt='go()', number=1000000)

Out[19]: 6.164631128311157

手动分度计时:In [16]: stmt = '''

...: from itertools import product

...: def go():

...: lst = [[[1], [2]], [[3, 3], [4]], [[5], [6,6,6]]]

...: for x in product(range(3), range(2)):

...: # rg = reduce(lambda result, index: result[index], x, lst)

...: value = lst[x[0]][x[1]][0]

...: '''

In [17]: timeit(setup=stmt, stmt='go()', number=1000000)

Out[17]: 3.633723020553589

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值