对两个值进行精确排序的pythonic方法是什么?



我有两个名为ab的数值。

我想将名称low分配给较小的值,将名称high分配给较大的值
做这件事的蟒蛇方式是什么?

我考虑过

low, high = sorted([a, b])

但这似乎有些过头了。

为什么它会被高估?sorted具有明确、高效、简洁的特点。

只需使用:low, high = sorted([a, b])

谈到Python的性能,您可以编写low, high = sorted((a, b)),因为元组几乎总是比列表更具性能,但这实际上是一个微观优化。

除了调用BUILD_UPLE而不是BUILD_LIST之外,没有什么区别。

证据如下:

import dis
import timeit
print("list:")
dis.dis("low, high = sorted([a, b])")
print( timeit.timeit("[a, b]", setup="a,b=1,'x'", number=10000000) )
print("-"*60)
print("tuple:")
dis.dis("low, high = sorted((a, b))")
print( timeit.timeit("(a, b)", setup="a,b=1,'x'", number=10000000) )

输出:

list:
1           0 LOAD_NAME                0 (sorted)
2 LOAD_NAME                1 (a)     
4 LOAD_NAME                2 (b)     
6 BUILD_LIST               2
8 CALL_FUNCTION            1
10 UNPACK_SEQUENCE          2
12 STORE_NAME               3 (low)   
14 STORE_NAME               4 (high)  
16 LOAD_CONST               0 (None)  
18 RETURN_VALUE
0.47138820000000003
------------------------------------------------------------
tuple:
1           0 LOAD_NAME                0 (sorted)
2 LOAD_NAME                1 (a)
4 LOAD_NAME                2 (b)
6 BUILD_TUPLE              2
8 CALL_FUNCTION            1
10 UNPACK_SEQUENCE          2
12 STORE_NAME               3 (low)
14 STORE_NAME               4 (high)
16 LOAD_CONST               0 (None)
18 RETURN_VALUE
0.3673789999999999

相关:在Python中,元组比列表更有效率吗?

您可以使用三元条件表达式和元组拆包。

low, high = (a, b) if a < b else (b, a)

最新更新