繁体   English   中英

如何使用带有多个 if 语句的 python 生成器?

[英]How to use python generators with multiple if statements?

说一些基本的东西,比如:

def fizzBuzz(n: int) -> List[str]:
        l =[]
        for i in range(1,n+1):
            if i%3==0 and i%5==0:
                l.append("FizzBuzz")
            elif i%3==0:
                l.append("Fizz")
            elif i%5==0:
                l.append("Buzz")
            else:
                l.append(str(i))
        return l

其中输入:n=15。
输出: [ "1", "2", "Fizz", "4", "Buzz", "Fizz", "7", "8", "Fizz", "Buzz", "11", "Fizz" , "13", "14", "FizzBu​​zz" ]
我已经开始了类似的事情:

["FizzBuzz" if x%3 ==0 and x%5==0 else str(x) for x in range(1, n+1)]

由于您要求生成器,这里是您的函数转换为 1,以及用法。

请注意, fizz_buzz(n)返回一个 NEW 生成器,因此如果您想要多次迭代,则每次都必须生成一个新生成器。

n = 15


def fizz_buzz(n: int):
    for i in range(1, n + 1):
        if i % 3 == 0 and i % 5 == 0:
            yield "FizzBuzz"
        elif i % 3 == 0:
            yield "Fizz"
        elif i % 5 == 0:
            yield "Buzz"
        else:
            yield str(i)


a = fizz_buzz(n)
for f in a:
    print(f)

输出:

 1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz

但是,您可能想要一个列表理解 one liner ,并且不知道它叫什么,并假设名称是“生成器”。

在这种情况下,

b = ["FizzBuzz" if i%3==0 and i%5==0 else "Fizz" if i%3==0 else "Buzz" if i%5==0 else str(i) for i in range(n)]
print(b)

而且,这也可以是一个单线性生成器

c = ("FizzBuzz" if i%3==0 and i%5==0 else "Fizz" if i%3==0 else "Buzz" if i%5==0 else str(i) for i in range(n))
for f in c:
    print(f)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM