Skip to main content
 首页 » 编程设计

python之在列表理解中添加额外的项目

2025年05月04日10三少

我有这种列表:

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 .它使您不仅可以在函数调用中使用 *,还可以在列表、生成器和集合推导中使用(这同样适用于 ** 和字典推导)。