簡體   English   中英

在python3的列表理解中使用if、elif和else

[英]Using if, elif and else in list comprehension in python3

我想將包含ifelifelse的基於循環的腳本轉換為列表理解,但我不知道該怎么做。

這是我編寫的腳本(它打印從 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM