ブール式に基づいて一連のタプルを平坦化するジェネレーターを探しています。私のデータは次のようになります。
my_data = ((3, 4), (None, 4), (5, 8), (None, 1), (None, 9)...)
私がやりたいのは、これを 1 次元の数値ジェネレーターにフラット化しNone
、そうでない場合は各タプルの最初の項目を取得し、それ以外の場合は 2 番目の項目を取得することです。私の結果は、次のシーケンスを生成します。
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