它们是完全不同的东西; list 是内置的,[] 是可用于例如列表理解或列表初始化(这是您正在做的)的运算符,也可用于访问容器中的某些索引等. 所以你是在比较苹果和橘子。
在list 与生成器表达式和列表解析之间,后者实际上更快:
$ python3 -m timeit '[_ for _ in range(1000)]'
10000 loops, best of 5: 29.4 usec per loop
$ python3 -m timeit 'list(_ for _ in range(1000))'
5000 loops, best of 5: 42.9 usec per loop
如果我们反汇编成字节码,我们会得到:
>>> dis.dis('[_ for _ in range(10)]')
1 0 LOAD_CONST 0 (<code object <listcomp> at 0x10d0647c0, file "<dis>", line 1>)
2 LOAD_CONST 1 ('<listcomp>')
4 MAKE_FUNCTION 0
6 LOAD_NAME 0 (range)
8 LOAD_CONST 2 (10)
10 CALL_FUNCTION 1
12 GET_ITER
14 CALL_FUNCTION 1
16 RETURN_VALUE
Disassembly of <code object <listcomp> at 0x10d0647c0, file "<dis>", line 1>:
1 0 BUILD_LIST 0
2 LOAD_FAST 0 (.0)
>> 4 FOR_ITER 8 (to 14)
6 STORE_FAST 1 (_)
8 LOAD_FAST 1 (_)
10 LIST_APPEND 2
12 JUMP_ABSOLUTE 4
>> 14 RETURN_VALUE
>>> dis.dis('list(_ for _ in range(10))')
1 0 LOAD_NAME 0 (list)
2 LOAD_CONST 0 (<code object <genexpr> at 0x10d0647c0, file "<dis>", line 1>)
4 LOAD_CONST 1 ('<genexpr>')
6 MAKE_FUNCTION 0
8 LOAD_NAME 1 (range)
10 LOAD_CONST 2 (10)
12 CALL_FUNCTION 1
14 GET_ITER
16 CALL_FUNCTION 1
18 CALL_FUNCTION 1
20 RETURN_VALUE
Disassembly of <code object <genexpr> at 0x10d0647c0, file "<dis>", line 1>:
1 0 LOAD_FAST 0 (.0)
>> 2 FOR_ITER 10 (to 14)
4 STORE_FAST 1 (_)
6 LOAD_FAST 1 (_)
8 YIELD_VALUE
10 POP_TOP
12 JUMP_ABSOLUTE 2
>> 14 LOAD_CONST 0 (None)
16 RETURN_VALUE
因此,除了必须查找名称(list、LOAD_NAME)之外,它似乎主要取决于内部设计;生成器表达式正在弹出表示堆栈。
将此与您所做的比较:
>>> dis.dis('[1]')
1 0 LOAD_CONST 0 (1)
2 BUILD_LIST 1
4 RETURN_VALUE
>>> dis.dis('list(1)')
1 0 LOAD_NAME 0 (list)
2 LOAD_CONST 0 (1)
4 CALL_FUNCTION 1
6 RETURN_VALUE
第一个构建一个列表,而第二个是(在查找名称之后)尝试调用函数list(实际上是一个可变序列类型类)。