如何将 python 生成器与多个 if 语句一起使用?
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",
“嘶嘶声”,
"4",
“嗡嗡声”,
“嘶嘶声”,
"7",
"8",
“嘶嘶声”,
“嗡嗡声”,
"11",
“嘶嘶声”,
"13",
"14",
“嘶嘶声”
]
我从类似的东西开始:
["FizzBuzz" if x%3 ==0 and x%5==0 else str(x) for x in range(1, n+1)]
既然你要求一个生成器,这里是你的函数转换成一个,连同用法。
注意 fizz_buzz(n)
returns 一个新的生成器,所以如果你想要多次迭代,你必须每次都生成一个新的。
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
但是你可能想要一个列表推导式,但不知道它叫什么,并假设这个名字是“生成器”。
那样的话,
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)
而且,这也可以是 one-liner-generator:
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)
说些基本的,比如:
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",
“嘶嘶声”,
"4",
“嗡嗡声”,
“嘶嘶声”,
"7",
"8",
“嘶嘶声”,
“嗡嗡声”,
"11",
“嘶嘶声”,
"13",
"14",
“嘶嘶声”
]
我从类似的东西开始:
["FizzBuzz" if x%3 ==0 and x%5==0 else str(x) for x in range(1, n+1)]
既然你要求一个生成器,这里是你的函数转换成一个,连同用法。
注意 fizz_buzz(n)
returns 一个新的生成器,所以如果你想要多次迭代,你必须每次都生成一个新的。
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
但是你可能想要一个列表推导式,但不知道它叫什么,并假设这个名字是“生成器”。
那样的话,
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)
而且,这也可以是 one-liner-generator:
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)