Список понимание выражается как
L = [mapping-expression for element in source-list if filter-expression]
теперь, заменить «для элемента-источника списка» части с
for i in range(1, 100)
который итерация по списку, содержащих целые числа от 1 до 99 возвращения одно целое вовремя.
"отображение-выражение" здесь
"Fizz"*(not i%3) + "Buzz"*(not i%5) or i
который использует целое число я вернулся из "для г в диапазоне (1, 100)"
, когда я делится на 3 или 5, я % 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) или (не я% 5) умножается со строками "Fizz" и "Buzz":
"Fizz" * True # returns "Fizz"
"Buzz" * False # returns ""
затем Строки возвращенного выше конкатенированной
"Fizz" + ""
в результате «Fizz» помещается в результирующий список, и этот процесс продолжается для каждой итерации, возвращая либо «Fizz» или «шум» или иногда раз целое число я сам, когда оба строка булево много plication возвращает пустую строку "". так
"" + "" or i # returns i
Результирующий список что-то вроде [1, 2, 'Fizz', 4 'Buzz', 'Fizz', 7, 8, 'Fizz', 'Buzz', 11, 'Fizz' , 13, 14, «FizzBuzz» ......]
примечание: в примере не используется опциональное выражение «if filter-expression».
Вы можете попытаться оценить детали самостоятельно для небольшого 'i' в интерактивной сессии Python:' 'Fizz" * (не 10% 3) 'или' "Buzz" * (не 5% 5) '. –
В Python оператор * на строке позволяет «размножать» строку положительным целым числом ..., чтобы указать несколько раз, чтобы повторить строку. Поэтому «somestring» * 0 означает, что не повторяйте его вообще; замените его пустой строкой. Таким образом, это умное понимание списка генерирует список строк «Fizz», «Buzz», «FizzBuzz» или целых чисел на основе логического принуждения по числовым результатам различных операций по модулю (математический остаток) для каждого из чисел в диапазоне 1 до 100). –