有没有比在Python中交换两个列表元素更快的方法了
L[a], L[b] = L[b], L[a]
还是我不得不求助于Cython或Weave之类?
看起来Python编译器使用此构造优化了临时元组:
import dis
def swap1():
a=5
b=4
a, b = b, a
def swap2():
a=5
b=4
c = a
a = b
b = c
print 'swap1():'
dis.dis(swap1)
print 'swap2():'
dis.dis(swap2)
swap1():
6 0 LOAD_CONST 1 (5)
3 STORE_FAST 0 (a)
7 6 LOAD_CONST 2 (4)
9 STORE_FAST 1 (b)
8 12 LOAD_FAST 1 (b)
15 LOAD_FAST 0 (a)
18 ROT_TWO
19 STORE_FAST 0 (a)
22 STORE_FAST 1 (b)
25 LOAD_CONST 0 (None)
28 RETURN_VALUE
swap2():
11 0 LOAD_CONST 1 (5)
3 STORE_FAST 0 (a)
12 6 LOAD_CONST 2 (4)
9 STORE_FAST 1 (b)
13 12 LOAD_FAST 0 (a)
15 STORE_FAST 2 (c)
14 18 LOAD_FAST 1 (b)
21 STORE_FAST 0 (a)
15 24 LOAD_FAST 2 (c)
27 STORE_FAST 1 (b)
30 LOAD_CONST 0 (None)
33 RETURN_VALUE
两个加载,一个ROT_TWO
和两个保存,而三个加载和三个保存。您不太可能找到更快的机制。
问题内容: 我有一堆看起来像这样的列表: 我想交换元素如下: 列表的大小可能有所不同,但是它们将始终包含偶数个元素。 我对Python相当陌生,目前正在这样做: 我知道这不是真正的Pythonic,而是想使用更高效的工具。也许列表理解? 问题答案: 无需复杂的逻辑,只需通过切片和步骤重新排列列表即可: TLDR; 编辑带说明 我相信大多数观众已经熟悉列表切片和多重分配。如果您不这样做,我会尽力解释
问题内容: 我在这样的列表中有一个元组/列表: python(在非常低的cpu / ram机器上运行)交换值的最快方法是什么… 当前使用: 有更好或更快速的方法吗??? 问题答案: 您可以使用地图: 或列表理解: 列表理解是首选方法,并且在需要lambda时,它比map快得多。但是请注意,列表理解具有严格的评估标准,也就是说,如果担心内存消耗,它将在绑定到变量后立即对其进行评估。 生成器 :
本文向大家介绍Python 修改列表中的元素方法,包括了Python 修改列表中的元素方法的使用技巧和注意事项,需要的朋友参考一下 如下所示: 以上这篇Python 修改列表中的元素方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。
问题内容: 当您执行类似列表在哪里的操作时,python会在列表上进行顺序搜索吗?还是创建哈希表表示来优化查找?在应用程序中,我需要这样做,因为我将在列表上进行很多查找,所以最好先执行诸如此类的操作,然后执行?还要注意,我将拥有的值列表将没有重复的数据,而且我实际上并不在乎它的顺序。我只需要能够检查值的存在。 问题答案: 还要注意,我将拥有的值列表将没有重复的数据,而且我实际上并不在乎它的顺序
问题内容: 输入: 输出: 什么是最优雅的(阅读:Pythonic)书写方式? 问题答案: 我自己会写一个生成器,但是像这样:
问题内容: 如果我有任意顺序的卡片套装列表,如下所示: 我想返回一个没有 有没有简单的方法可以做到这一点? 问题答案: 如果您不需要单独