[英]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", "FizzBuzz" ]
我已經開始了類似的事情:
["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.