2017-04-05 101 views
0

我有一个编码接口,它有一个计数器组件。它随着每次更新而简单地增加1。考虑一下我必须使用的随时间推移的{1,2,3,...}的无限生成器。在Python中向前和向后迭代

我需要使用此值并从-1.5到1.5重复。所以,迭代应该从-1.5开始,达到1.5,然后从1.5回到-1.5。

我应该如何使用这个无限迭代器来生成该范围内的迭代?

+0

在什么增量? – AChampion

+1

提供一个示例输入和输出,以减少混淆。 – sai

+0

@Jeremy - 提供给我们一个你迄今为止尝试过的样品,以及它如何不能满足你的需求。要求我们解决你的问题,而不帮助我们看到你的尝试有点像要求我们为你做功课。 – Forty3

回答

0

喜欢的东西:

import itertools 

infGenGiven = itertools.count() # This is similar your generator 

def func(x): 
    if x%2==0: 
     return 1.5 
    else: 
     return -1.5 

infGenCycle = itertools.imap(func, infGenGiven) 

count=0 
while count<10: 
    print infGenCycle.next() 
    count+=1 

输出:

1.5 
-1.5 
1.5 
-1.5 
1.5 
-1.5 
1.5 
-1.5 
1.5 
-1.5 

请注意,这将启动1.5,因为在infGenGiven的第一个值是0,虽然你的发电机为1等的infGenCycle输出会给你你想要的。

1

您可以使用cycleitertools重复一个序列。

from itertools import cycle 

# build the list with 0.1 increment 
v = [(x-15)/10 for x in range(31)] 
v = v + list(reversed(v)) 
cv = cycle(v) 

for c in my_counter: 
    x = next(cv) 

这将重复列表v

-1.5, -1.4, -1.3, -1.2, -1.1, -1.0, -0.9, -0.8, -0.7, -0.6, -0.5, -0.4, 
-0.3, -0.2, -0.1, 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 
1.1, 1.2, 1.3, 1.4, 1.5, 1.5, 1.4, 1.3, 1.2, 1.1, 1.0, 0.9, 0.8, 0.7, 
0.6, 0.5, 0.4, 0.3, 0.2, 0.1, 0.0, -0.1, -0.2, -0.3, -0.4, -0.5, -0.6, 
-0.7, -0.8, -0.9, -1.0, -1.1, -1.2, -1.3, -1.4, -1.5, -1.5, -1.4, -1.3, 
-1.2, -1.1, -1.0, -0.9, -0.8, -0.7, -0.6, -0.5, -0.4, -0.3, -0.2, -0.1, 
0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3, 
1.4, 1.5, 1.5, 1.4, 1.3, 1.2, 1.1, 1.0, 0.9 ...