Python 周中的无限生成器
Infinite generator in Python for days of week
我看过类似的问题,我的更实际一点,我想一遍又一遍地遍历工作日的范围。
到目前为止我的迭代器不是循环的,请帮我解决这个问题。
def day_generator():
for w in ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']:
yield w;
g = day_generator()
print g.next()
您可以使用 itertools 循环:
https://docs.python.org/2/library/itertools.html#itertools.cycle
import itertools
def day_generator():
days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
for day in itertools.cycle(days):
yield day
长话短说(如评论中所述)它真的足够了:
day_generator = itertools.cycle(days)
谢谢@FlavianHautbois
itertools.cycle 完全按照您的意愿行事:
import itertools
day_generator = itertools.cycle(['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'])
您几乎已经搞定了,您只需要将您的 "yield" 语句放入无限循环中,以便它在需要时始终环绕:
def day_generator():
while True:
for w in ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']:
yield w
g = day_generator()
for _ in range(10):
print(next(g))
##Output:
##
## Monday
## Tuesday
## Wednesday
## Thursday
## Friday
## Saturday
## Sunday
## Monday
## Tuesday
## Wednesday
但是,正如其他人指出的那样,itertools.cycle
是最简洁的方法。
我看过类似的问题,我的更实际一点,我想一遍又一遍地遍历工作日的范围。
到目前为止我的迭代器不是循环的,请帮我解决这个问题。
def day_generator():
for w in ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']:
yield w;
g = day_generator()
print g.next()
您可以使用 itertools 循环: https://docs.python.org/2/library/itertools.html#itertools.cycle
import itertools
def day_generator():
days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
for day in itertools.cycle(days):
yield day
长话短说(如评论中所述)它真的足够了:
day_generator = itertools.cycle(days)
谢谢@FlavianHautbois
itertools.cycle 完全按照您的意愿行事:
import itertools
day_generator = itertools.cycle(['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'])
您几乎已经搞定了,您只需要将您的 "yield" 语句放入无限循环中,以便它在需要时始终环绕:
def day_generator():
while True:
for w in ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']:
yield w
g = day_generator()
for _ in range(10):
print(next(g))
##Output:
##
## Monday
## Tuesday
## Wednesday
## Thursday
## Friday
## Saturday
## Sunday
## Monday
## Tuesday
## Wednesday
但是,正如其他人指出的那样,itertools.cycle
是最简洁的方法。