python元组速度比列表快_python – 列表查找比元组更快?

这篇博客探讨了Python中元组和列表在查找性能上的差异。通过实验发现,在某些情况下,列表的索引查找速度甚至比元组更快,这与普遍认为元组更快的观念相悖。作者进行了多次测试并分享了结果,提示读者不应将这些结果视为一般规律,因为性能差异可能取决于特定场景和Python版本。
摘要由CSDN通过智能技术生成

在过去,当我在一个紧缩的循环中需要类似数组的索引查找时,我通常使用元组,因为它们似乎通常是非常好的(接近使用n个变量)。不过,我今天决定质疑这个假设,并提出了一些令人惊讶的结果:

In [102]: l = range(1000)

In [103]: t = tuple(range(1000))

In [107]: timeit(lambda : l[500], number = 10000000)

Out[107]: 2.465047836303711

In [108]: timeit(lambda : t[500], number = 10000000)

Out[108]: 2.8896381855010986

元组查找似乎比列表查找长17%!重复实验得到了类似的结果。我们发现两者都是:

In [101]: dis.dis(lambda : l[5])

1 0 LOAD_GLOBAL 0 (l)

3 LOAD_CONST 1 (5)

6 BINARY_SUBSCR

7 RETURN_VALUE

作为参考,典型的10,000,000全局变量查找/返回需要2.2s。另外,我没有羔羊跑了,你知道,万一(注意,这个数字是100,000,000而不是10,000,000)。

In [126]: timeit('t[500]', 't=range(1000)', number=100000000)

Out[126]: 6.972800970077515

In [127]: timeit('t[500]', 't=tuple(range(1000))', number=100000000)

Out[127]: 9.411366939544678

在这里,元组查找耗时35%。这里发生了什么?对于非常紧张的循环,这实际上似乎是一个重大的差异。可能是什么原因造成的?

请注意,对于分解为变量(例如x,y = t),元组稍快(在我的少数测试中少于6%的时间),并且从固定数量的参数构造,元组更快(减少约83% )。不要把这些结果作为一般规则;我刚刚进行了一些对大多数项目来说毫无意义的minitests。

In [169]: print(sys.version)

2.7.1 (r271:86882M, Nov 30 2010, 09:39:13)

[GCC 4.0.1 (Apple Inc. build 5494)]

回答: 在Python中,列表元组更快。这是因为元组是不可变的数据结构,它们的元素不能被修改,添加或删除。而列表是可变的,可以进行修改、添加或删除操作。所以在需要频繁修改数据的情况下,使用列表更快。引用中的代码示例展示了对元组添加元素的错误,而列表则可以使用append方法进行添加。另外,引用中的代码示例展示了如何使用itertools模块将元组列表转换为列表,这在一些场景下非常方便。总的来说,列表更加灵活和易于操作,所以在需要频繁修改数据或进行添加、删除操作的情况下,列表元组更快。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Python 元组转换为列表](https://blog.csdn.net/brightgreat/article/details/127791056)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [python 修改元组的方法?怎么修改元组?](https://blog.csdn.net/PSpiritV/article/details/123011555)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值