python嵌套列表索引 index_链接python列表的多个索引操作的最快方法

我将为此使用python-builtin reduce,它似乎并不复杂,并且在我的测试中并没有那么慢:

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循环代替:

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

value = lst

for index in x:

value = value[index]

value = value[0]

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

至于为什么要使用reduce vs. for,JavaScript社区内部一直在进行风格上的争论,即您应该在Arrays上使用reduce,map,filter函数还是使用for循环版本,因为它速度更快,并且您可能想参考那个辩论来选择你所处的立场.

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、付费专栏及课程。

余额充值