リスト内包は現在
L = [mapping-expression for element in source-list if filter-expression]
として表現され、どちらの整数を返す99の整数1を含むリストを反復
for i in range(1, 100)
と部分「ソースリスト内の要素は、」置き換えます一度に。ここで
"マッピング発現" が "範囲(1、100)でiについて" 私はから返される整数を使用
"Fizz"*(not i%3) + "Buzz"*(not i%5) or i
ある
iが3または5で割り切れる場合、I %3およびi%5は0を返します。他の整数は、iが割り切れないときに再調整されます。ブールから返さ
(not i % 3) # return True when i is divisible by 3
(not i % 5) # returns False when i is not divisible by 5
(ない私は%3)または(iは5%ではない)文字列 "フィズ" および "バズ" と乗算される。次いで
"Fizz" * True # returns "Fizz"
"Buzz" * False # returns ""
文字列が上記戻されその結果、「フィズ」として
"Fizz" + ""
が結果リストに配置され、このプロセスは、「フィズ」または「バズ」又は時には回整数のいずれかを戻し、反復ごとに進み、連結I自体の両方の文字列ブールミューltiplicationは空の文字列 ""を返します。
"" + "" or i # returns i
ので、結果のリストは[1、2、 'フィズ'、4、 'バズ'、 'フィズ'、7、8、 'フィズ'、 'バズ'、11、 'フィズ' のようなものです、13,14、 'FizzBuzz' ......]
注:この例では、オプションの「if filter-expression」は使用されていません。
インタラクティブなPythonセッションで小さな「i」の部分を独立して評価しようとすると、「Fizz」*(10%3ではない) 'または「Buzz」*(5%5でない)'です。 –
Pythonでは、文字列の*演算子は、文字列を繰り返す回数を指定するために、文字列を正の整数で「掛ける」ことができます。だから "somestring" * 0は全くそれを繰り返さないことを意味します。それを空の文字列に置き換えます。したがって、この巧妙なリストの理解は、範囲内の各数値に対するさまざまなモジュロ(数学的な剰余)演算の数値結果に対するブール型強制に基づいて、「Fizz」、「Buzz」、「FizzBuzz」文字列、または整数のリストを生成する1〜100)。 –