Noa*_*ith 97 python performance dictionary list
我明白它们本质上都是一样的,但在风格方面,哪个更好(更多Pythonic)用于创建空列表或字典?
Gre*_*ins 182
就速度而言,空列表/决策没有竞争:
>>> from timeit import timeit
>>> timeit("[]")
0.040084982867934334
>>> timeit("list()")
0.17704233359267718
>>> timeit("{}")
0.033620194745424214
>>> timeit("dict()")
0.1821558326547077
Run Code Online (Sandbox Code Playgroud)
对于非空的:
>>> timeit("[1,2,3]")
0.24316302770330367
>>> timeit("list((1,2,3))")
0.44744206316727286
>>> timeit("list(foo)", setup="foo=(1,2,3)")
0.446036018543964
>>> timeit("{'a':1, 'b':2, 'c':3}")
0.20868602015059423
>>> timeit("dict(a=1, b=2, c=3)")
0.47635635255323905
>>> timeit("dict(bar)", setup="bar=[('a', 1), ('b', 2), ('c', 3)]")
0.9028228448029267
Run Code Online (Sandbox Code Playgroud)
另外,使用括号表示法让你使用列表和字典理解,这可能是合理的.
orl*_*rlp 32
在我看来[],{}是创建空列表/ dicts的最pythonic和可读的方法.
但要警惕set(),例如:
this_set = {5}
some_other_set = {}
Run Code Online (Sandbox Code Playgroud)
可能会让人困惑.第一个创建一个包含一个元素的集合,第二个创建一个空的dict而不是一个集合.
Thi*_*ter 16
该字典的文字可能是一个小小的其字节码更短更快一点:
In [1]: import dis
In [2]: a = lambda: {}
In [3]: b = lambda: dict()
In [4]: dis.dis(a)
1 0 BUILD_MAP 0
3 RETURN_VALUE
In [5]: dis.dis(b)
1 0 LOAD_GLOBAL 0 (dict)
3 CALL_FUNCTION 0
6 RETURN_VALUE
Run Code Online (Sandbox Code Playgroud)
同样适用于listvs[]
小智 7
小心list()并以[]不同的方式工作:
>>> def a(p):
... print(id(p))
...
>>> for r in range(3):
... a([])
...
139969725291904
139969725291904
139969725291904
>>> for r in range(3):
... a(list())
...
139969725367296
139969725367552
139969725367616
Run Code Online (Sandbox Code Playgroud)
list()总是在堆上创建一个新对象,但[]在许多情况下可以重用内存单元。
| 归档时间: |
|
| 查看次数: |
103680 次 |
| 最近记录: |