我正在寻找一个生成器,它可以根据布尔表达式对元组序列进行平铺。我的数据长这样:
我想要做的是将其压缩为一个一维数字生成器,如果元组中的第一项不是
my_data = ((3, 4), (None, 4), (5, 8), (None, 1), (None, 9)...)
我想要做的是将其压缩为一个一维数字生成器,如果元组中的第一项不是
None
,则取第一项,否则取第二项。我的结果将产生以下序列:3, 4, 5, 1, 9...
我认为最简单的方法是使用带有短路功能的布尔表达式,但我似乎无法组成一个正确的生成器。我意识到我可以定义一个生成器函数并且这相当直截了当,但我想知道是否可以使用推导式来实现?
我的尝试:
(x or y for subitem in my_data for x, y in subitem)
追踪:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in <genexpr>
TypeError: 'int' object is not iterable
my_data = ((3, 4), (None, 4), (5, 8), (None, 1), (0, None))
上失败了。 - Tim Pietzcker