我正在寻找一个将根据布尔表达式将元组序列扁平化的生成器。我的数据是这样的:使用布尔表达式生成器展平序列
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
对于我的用例,只有在非零值时才可用,否则它不是,但是非常重要。欣赏它。 – donopj2 2012-07-23 09:54:08