Leo*_*rdo 1 python list-comprehension list
我有这样的清单:
a = ['orange', 'apple', 'banana']
Run Code Online (Sandbox Code Playgroud)
从这里我使用简单的列表理解构建另一个元组列表:
b = [(key, key.upper()) for key in a]
Run Code Online (Sandbox Code Playgroud)
结果是这样的:
b = [('orange', 'ORANGE'), ('apple', 'APPLE'), ('banana', 'BANANA')]
Run Code Online (Sandbox Code Playgroud)
现在我需要在新生成的b列表的开头(或者例如末尾)插入另一个元组:('---', None).
这两个简单的解决方案是:
# Solution 1
b = [('---', None)] + b
# Solution 2
b.insert(0, ('---', None))
Run Code Online (Sandbox Code Playgroud)
问题:
有没有办法直接从列表推导构造中完成同样的事情?
可以在python中使用这样的(伪代码)吗?
b = [('---', None), (key, key.upper()) for key in a]
Run Code Online (Sandbox Code Playgroud)
是的,通过使用生成器理解:
b = [('---', None), *((key, key.upper()) for key in a)]
Run Code Online (Sandbox Code Playgroud)
您也可以使用列表推导,而不是使用生成器理解.使用生成器理解的好处是它们不会创建新列表,而是逐个分发项目.如果list(a)很大,则会对内存使用和/或性能产生影响.
使用星号("splat运算符")解压缩这样的序列是PEP 448 - 附加解包概括.它允许您不仅使用*函数调用,而且还使用list,generator和set comprehensions(同样适用于**和字典理解).
| 归档时间: |
|
| 查看次数: |
762 次 |
| 最近记录: |