在Python列表中交换元素的最快方法

Ger*_*ncy 46 python performance

有没有更快的方法来交换Python中的两个列表元素

L[a], L[b] = L[b], L[a]
Run Code Online (Sandbox Code Playgroud)

还是我不得不求助于CythonWeave等?

Ign*_*ams 126

看起来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)
Run Code Online (Sandbox Code Playgroud)

输出:

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        
Run Code Online (Sandbox Code Playgroud)

两个负载,一个ROT_TWO和两个保存,三个负载和三个保存.您不太可能找到更快的机制.

  • 先生,您刚刚向我展示了我喜欢python的另一个原因.我从来不知道"dis" (20认同)
  • 太棒了!! 感谢您告诉我们dis (2认同)