don*_*pj2 3 python list-comprehension
我正在寻找一个生成器,它将基于布尔表达式展平一系列元组.我的数据如下:
my_data = ((3, 4), (None, 4), (5, 8), (None, 1), (None, 9)...)
Run Code Online (Sandbox Code Playgroud)
我想做的是将它变成一个数字的一维生成器,如果不是None,我将每个元组中的第一个项目取出,否则取第二个项目.我的结果将产生以下顺序:
3, 4, 5, 1, 9...
Run Code Online (Sandbox Code Playgroud)
我认为最简单的方法是使用带短路的布尔表达式,但我似乎无法组成一个合适的发生器.我意识到我可以定义一个生成器函数,这将是相当简单的,但我很好奇这是否可以通过理解来完成?
我的尝试:
(x or y for subitem in my_data for x, y in subitem)
Run Code Online (Sandbox Code Playgroud)
追溯:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in <genexpr>
TypeError: 'int' object is not iterable
Run Code Online (Sandbox Code Playgroud)
(x[0] or x[1] for x in my_data)
Run Code Online (Sandbox Code Playgroud)
或者,
(x or y for x,y in my_data)
Run Code Online (Sandbox Code Playgroud)