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

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)

L3v*_*han 9

是的,通过使用生成器理解:

b = [('---', None), *((key, key.upper()) for key in a)]
Run Code Online (Sandbox Code Playgroud)

可以使用列表推导,而不是使用生成器理解.使用生成器理解的好处是它们不会创建新列表,而是逐个分发项目.如果list(a)很大,则会对内存使用和/或性能产生影响.

使用星号("splat运算符")解压缩这样的序列是PEP 448 - 附加解包概括.它允许您不仅使用*函数调用,而且还使用list,generator和set comprehensions(同样适用于**和字典理解).

  • 它基本上产生了一个可应用的迭代元素序列. (2认同)