python>=3.5可选:解包到列表文本中
[*newdict]
新的
unpacking generalizations (PEP 448)
与python 3.5一起引入,现在您可以轻松地执行以下操作:
>>> newdict = {1:0, 2:0, 3:0}
>>> [*newdict]
[1, 2, 3]
打开包装
*
与一起工作
任何
对象,它是可Iterable的,并且由于字典在遍历时返回它们的键,所以您可以通过在列表文本中使用它轻松地创建列表。
添加
.keys()
即
[*newdict.keys()]
可能有助于使您的意图更明确一点,尽管这会使您损失函数查找和调用。(老实说,这不是你应该做的事
真正地
担心)。
这个
*iterable
语法类似于
list(iterable)
其行为最初记录在
Calls section
python参考手册。在PEP 448中,限制
*无法识别
可能出现的是松动的,允许它也被放在列表、集合和元组文本中,参考手册
Expression lists
也更新了以说明这一点。
虽然相当于
list(newdict)
不同的是,它更快(至少对于小字典而言),因为实际上没有执行函数调用:
%timeit [*newdict]
1000000 loops, best of 3: 249 ns per loop
%timeit list(newdict)
1000000 loops, best of 3: 508 ns per loop
%timeit [k for k in newdict]
1000000 loops, best of 3: 574 ns per loop
对于较大的字典,速度几乎是相同的(遍历大型集合的开销比函数调用的成本小)。
以类似的方式,您可以创建元组和字典键集:
>>> *newdict,
(1, 2, 3)
>>> {*newdict}
{1, 2, 3}
注意元组中的尾随逗号!