[英]Generator in Python, representing infinite stream
我的代码如下:
def infinite_loop():
li = ['a', 'b', 'c']
x = 0
while True:
yield li[x]
if x > len(li):
x = 0
else:
x += 1
我得到一个列表索引超出范围错误。 我的代码出了什么问题?
测试为 2。最高有效索引是len(li) - 1
,因此在使用该索引后,需要将其重置为0
:
def infinite_loop():
li = ['a', 'b', 'c']
x = 0
while True:
yield li[x]
if x == len(li) - 1:
x = 0
else:
x += 1
当您尝试访问li[x]
而x
等于或大于列表的大小时,它将抛出OutOfRange
异常。
while True:
# if x==3 this will throw error
yield li[x]
if x > len(li):
x = 0
else:
x += 1
如果在if
语句之后移动yield
,错误就会消失
while True:
# if x==3, the following statement will assign 0 value to x
# But you need to check with >= instead of >
if x >= len(li):
x = 0
else:
x += 1
yield li[x]
但是您可以使用模运算符 (%) 来简化它
while True:
yield li[x % len(li)]
x += 1
这是一个工作示例: https : //repl.it/@HarunYlmaz/python-generator
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.