我有这种列表:
a = ['orange', 'apple', 'banana']
然后我使用简单的列表理解构建了另一个元组列表:
b = [(key, key.upper()) for key in a]
结果是这样的:
b = [('orange', 'ORANGE'), ('apple', 'APPLE'), ('banana', 'BANANA')]
现在我需要在新生成的 b 列表的开头(例如末尾)插入另一个元组:('---', None).
两个简单的解决方案是:
# Solution 1
b = [('---', None)] + b
# Solution 2
b.insert(0, ('---', None))
问题:
有没有一种方法可以直接从列表理解构造中完成同样的事情?
在 python 中可以实现这样的东西(伪代码)吗?
b = [('---', None), (key, key.upper()) for key in a]
请您参考如下方法:
是的,通过使用生成器理解:
b = [('---', None), *((key, key.upper()) for key in a)]
除了使用生成器推导式之外,您还可以使用列表推导式。使用生成器推导式的好处是它们不会创建新列表,而是一项一项地分发。如果您的列表 (a) 很大,这可能会影响内存使用和/或性能。
使用星号(“splat 运算符”)解压这样的序列是 PEP 448 — Additional Unpacking Generalizations .它使您不仅可以在函数调用中使用 *,还可以在列表、生成器和集合推导中使用(这同样适用于 ** 和字典推导)。
