[英]Using if, elif and else in list comprehension in python3
我想將包含if
、 elif
和else
的基於循環的腳本轉換為列表理解,但我不知道該怎么做。
這是我編寫的腳本(它打印從 1 到 100 的數字,但是對於 3 的倍數,它打印“fizz”,對於 5 的倍數,它打印“buzz”,對於 3 和 5 的倍數,它打印“fizzbuzz”) :
for num in range(1, 101):
if num % 3 == 0 and num % 5 == 0:
print('fizzbuzz')
elif num % 3 == 0:
print('fizz')
elif num % 5 ==0:
print('buzz')
else:
print(num)
elif
不是if-else 簡寫(又名if else 條件運算符)的一部分,但您可以通過鏈接這些運算符來實現相同的邏輯,例如:
if A:
v = a
elif B:
v = b
else:
v = c
變成
v = a if A else b if B else c
您可以在列表理解中使用條件運算符表達式:
[a if A else b if B else c for something in someiterator]
請注意,事情可能很快變得不可讀,例如,在您的示例中可能不推薦這樣做:
['fizzbuzz' if num%3 == 0 and num%5 == 0 else 'fizz' if num%3 == 0 else 'buzz' if num%5 == 0 else num for num in range(1, 101)]
列表理解不是正確的工具,因為您想做某事( print
)而不是生成列表。
首先,您應該用一個函數替換“開關”:
def foobar(num):
if num % 3 == 0 and num % 5 == 0:
return 'fizzbuzz'
elif num % 3 == 0:
return 'fizz'
elif num % 5 ==0:
return 'buzz'
else:
return str(num) # return a string to have a consistent return type
(如果你願意,你可以像@EnzoBnl's answer中那樣制作這個函數的一個襯里,但這不是一個好主意。)。 現在,您的代碼如下所示:
for num in range(1, 101):
print(foobar(num))
如果您想要列表理解(此處為生成器),請使用:
print("\n".join(foobar(num) for num in range(1, 101)))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.