如何解决如何在多个if语句中使用python生成器?
说一些基本的东西,例如:
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”
]
我开始的时候是这样的:
["FizzBuzz" if x%3 ==0 and x%5==0 else str(x) for x in range(1,n+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
但是您可能想要一个列表理解器,并且不知道它叫什么,并假设该名称是“发电机”。
在这种情况下,
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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。