質問: 内包表記を最近勉強しています。 下記のコードの見方について、質問です。 `python3.x print(["basketball" if i%15==0 else "basket" if i%3==0 else "ball" if i%5==0 else i for i in range(1,16)])` 出力結果 [1, 2, 'fizz', 4, 'buzz', 'fizz', 7, 8, 'fizz', 'buzz', 11, 'fizz', 13, 14, 'fizzbuzz'] 以下のように解釈したのですが、誤りがありましたら、ご指摘お願いします。 『解釈』 i%15==0を満たす場合、basketball i%3==0を満たす場合、basket i%5==0を満たす場合、ball ifの条件をどれも満たさない場合は、iを出力 ※分解して考えてみました。 ■i%15==0を満たしたら、basketball "basketball" if i%15==0 else ■上記を満たさない場合は、次のif条件を見る。 i%3==0を満たしたら、basket "basket" if i%3==0 else ■上記を満たさない場合は、次のif条件を見る。 i%5==0を満たしたら、ball "ball" if i%5==0 ■上記すべてのif条件を満たせないものは、iを出力 else i
回答: 合っていると思いますよ。 ただ、それは内包表記というより条件演算子の使い方ですね。 さすがに読みづら過ぎるので、私ならこう書きます。 ``` def func(i): if i % 15 == 0: return 'basketball' if i % 3 == 0: return 'basket' if i % 5 == 0: return 'ball' return str(i) lst = [func(i) for i in range(1,16)] # あくまで内包表記はリストを作るだけ print(lst) ``` いわゆるfizzbuzzなので、調べると色んな解法がありますね。