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

时间:2019-07-17 08:54:38

标签: python python-3.x list-comprehension

我想将包含ifelifelse的基于循环的脚本转换为列表理解,但是我不知道该怎么做。

这是我编写的脚本(它打印从1到100的数字,但是对于3的倍数,它会打印“嘶嘶声”;对于5的倍数,它会打印“嗡嗡声”,对于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)

2 个答案:

答案 0 :(得分:1)

列表理解不是正确的工具,因为您想做某事print),而不要生成列表

首先,您应该用一个函数替换“ switch”:

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的回答中那样使此函数成为一个衬里,但这不是一个好主意。)现在,您的代码如下:

for num in range(1, 101):
    print(foobar(num))

如果您想要列表理解(此处为生成器),请使用:

print("\n".join(foobar(num) for num in range(1, 101)))

答案 1 :(得分:0)

您不能在列表理解中使用elif,因为它不是 if-else 短表达式语法的一部分。

但是您可以通过链接获得相同的逻辑:

if b1:
    a
elif b2:
    b
else:
    c

成为

a if b1 else b if b2 else c

所以这可以为您解决问题:

[print('fizzbuzz') if num %3 == 0 and num%5 == 0  else print('fizz') if num%3 == 0 else print('buzz') if num%5 ==0 else print(num) for num in range(1, 101)]

注意:完全不建议在现实生活中的项目中使用这种难以理解的列表理解!