我最近比较了处理速度[]和,list()并且惊讶地发现它的[]运行速度比它快三倍list().我跑了相同的测试与{}和dict(),结果几乎相同:[]和{}两个花了大约0.128sec /百万次,而list()和dict()大约花费每个0.428sec /万次.
为什么是这样?不要[]和{}(可能()和'',太)立即传回文字的一些空股票的份,而其明确命名同行(list(),dict(),tuple(),str())完全去创建一个对象,他们是否真的有元素?
我不知道这两种方法有何不同,但我很想知道.我无法在文档中或在SO上找到答案,搜索空括号结果比我预期的问题更多.
我拨打了我的时序结果timeit.timeit("[]")和timeit.timeit("list()"),和timeit.timeit("{}")和timeit.timeit("dict()"),分别比较列表和字典.我正在运行Python 2.7.9.
我最近发现的" 为什么是,如果真慢于如果为1? "来比较的性能if True来if 1,似乎触及了类似的文字,对全局的情况; 也许值得考虑一下.
在PyCharm中,当我写道:
return set([(sy + ady, sx + adx)])
Run Code Online (Sandbox Code Playgroud)
它说"函数调用可以用set literal替换",所以它替换为:
return {(sy + ady, sx + adx)}
Run Code Online (Sandbox Code Playgroud)
这是为什么?set()Python中的A 与字典不一样{}?
如果它想要优化它,为什么这更有效?
这种差异使我感到困惑:
>>> s = "()())()"
>>> print set(s)
set([')', '('])
>>> print {s}
set(['()())()'])
Run Code Online (Sandbox Code Playgroud)
为什么?
我有兴趣找到在 Python 中初始化空集的最快方法(我使用的是 3.8)。{}您不能像创建 那样实例化空集dict,因此通常建议使用set()构造函数。前几天我注意到还有另一种方法来实例化空集:您可以将空元组解压()到{...}集合的语法中,如下所示:{*()}。timeit使用in 中的模块对此进行计时ipython会得到以下结果:
%timeit {*()}\n67.7 ns \xc2\xb1 1.68 ns per loop (mean \xc2\xb1 std. dev. of 7 runs, 10000000 loops each)\n\n%timeit set()\n84.5 ns \xc2\xb1 2.57 ns per loop (mean \xc2\xb1 std. dev. of 7 runs, 10000000 loops each)\nRun Code Online (Sandbox Code Playgroud)\n我发现这很奇怪 -set()相对于{*()}. 过去也曾对例如[]vs.list()和{}vs.进行过相同的观察dict()。
%timeit []\n17.8 ns \xc2\xb1 0.791 …Run Code Online (Sandbox Code Playgroud) 所以这是我的时间:
>>> import timeit
>>> timeit.timeit(lambda: set(l))
0.7210583936611334
>>> timeit.timeit(lambda: {*l})
0.5386332845236943
Run Code Online (Sandbox Code Playgroud)
为什么这样,我的意见是平等的,但事实并非如此.
因此,从这个例子中拆包很快,对吧?
python ×5
set ×3
benchmarking ×1
list ×1
literals ×1
performance ×1
python-3.x ×1
sequence ×1
timing ×1
unpack ×1