もう例題としては使い古された感のあるFizzBuzzを、Pythonicなリスト内包表記で書いてみる。実質ワンライナー。
def fizzbuzz(N):
"""FizzBuzzのリスト内包表記での実装
Example:
>>> print fizzbuzz(10)
[1, 2, 'Fizz', 4, 'Buzz', 'Fizz', 7, 8, 'Fizz', 'Buzz']
>>> print fizzbuzz(30)
[1, 2, 'Fizz', 4, 'Buzz', 'Fizz', 7, 8, 'Fizz', 'Buzz', 11, 'Fizz', 13, 14, 'FizzBuzz', 16, 17, 'Fizz', 19, 'Buzz', 'Fizz', 22, 23, 'Fizz', 'Buzz', 26, 'Fizz', 28, 29, 'FizzBuzz']
"""
return [(i%3==0)*'Fizz' + (i%5==0)*'Buzz' or i for i in range(1, N+1)]
ポイント
-
(i%3==0)*'Fizz'
で、括弧内の真偽によって文字列を追加するかどうかが決まる -
or
による短絡評価で、3か5で割り切れない数はそのまま出力