后续来自: Create List of Single Item Repeated n Times in Python
python -m timeit '[0.5]*100000'
1000 loops, best of 3: 382 usec per loop
python -m timeit '[0.5 for i in range(100000)]'
100 loops, best of 3: 3.07 msec per loop
显然,由于 range(),第二个较慢。我不知道为什么 [e] * n 这么快(或者它是如何在 Python 内部实现的)。
请您参考如下方法:
dis.dis让您查看 Python 在评估每个表达式时执行的操作:
In [57]: dis.dis(lambda: [0.5]*100000)
1 0 LOAD_CONST 1 (0.5)
3 BUILD_LIST 1
6 LOAD_CONST 2 (100000)
9 BINARY_MULTIPLY
10 RETURN_VALUE
In [58]: dis.dis(lambda: [0.5 for i in range(100000)])
1 0 BUILD_LIST 0
3 LOAD_GLOBAL 0 (range)
6 LOAD_CONST 1 (100000)
9 CALL_FUNCTION 1
12 GET_ITER
>> 13 FOR_ITER 12 (to 28)
16 STORE_FAST 0 (i)
19 LOAD_CONST 2 (0.5)
22 LIST_APPEND 2
25 JUMP_ABSOLUTE 13
>> 28 RETURN_VALUE
列表理解执行循环,每次加载常量 0.5,并将其附加到结果列表。
表达式[0.5]*100000 只需要一个BINARY_MULTIPLY .
另请注意,[obj]*N 生成一个长度为 N 的列表,其中 N 引用完全相同的 obj 。
列表理解 [expr for i in range(N)] 求值 expr N 次 --即使 expr 每次都计算出相同的值。
