我正在尋找一個將根據布爾表達式將元組序列扁平化的生成器。我的數據是這樣的:使用布爾表達式生成器展平序列
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