ano*_*ard 13 python loops generator
我的理解是使用Generator是实现这类目标的最佳方式,但我愿意接受建议.
具体来说,一个用例是这样的:我想打印一些项目和另一个列表,任意长度,必要时截断初始迭代器.
这是工作的python代码,演示了我想要的确切示例行为:
def loop_list(iterable):
"""
Return a Generator that will infinitely repeat the given iterable.
>>> l = loop_list(['sam', 'max'])
>>> for i in range(1, 11):
... print i, l.next()
...
1 sam
2 max
3 sam
4 max
5 sam
6 max
7 sam
8 max
9 sam
10 max
>>> l = loop_list(['sam', 'max'])
>>> for i in range(1, 2):
... print i, l.next()
...
1 sam
"""
iterable = tuple(iterable)
l = len(iterable)
num = 0
while num < l:
yield iterable[num]
num += 1
if num >= l:
num = 0
Run Code Online (Sandbox Code Playgroud)
您可能已经注意到,这仅适用于实现的列表/元组/迭代__getitem__(如果我没有记错的话).理想情况下,我希望能够传递任何可迭代的,并接收一个可以正确循环其内容的生成器.
如果有一个更好的方法来做这样的事情没有发电机,我也很好.
Jon*_*ier 53
您可以使用itertools.cycle(链接页面上包含的来源).
import itertools
a = [1, 2, 3]
for element in itertools.cycle(a):
print element
# -> 1 2 3 1 2 3 1 2 3 1 2 3 ...
Run Code Online (Sandbox Code Playgroud)
小智 13
尝试这个-
L = [10,20,30,40]
def gentr_fn(alist):
while 1:
for j in alist:
yield j
a = gentr_fn(L)
print a.next()
print a.next()
print a.next()
print a.next()
print a.next()
print a.next()
print a.next()
>>gentr_fn(x,y)
10 20 30 40 10 20 30 ...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12841 次 |
| 最近记录: |