我尝试在python中创建一个返回此内容的生成器:
itemList = []
for i in myGenerator(12):
itemList.append(i)
print itemList
>>> [0 0.334, 1, 2, 3, 4, 5, 6, 7, 8, 8.667, 9]
这就是我现在所拥有的:
def myGenerator(index) :
indexList = xrange(index)
for i in indexList :
if i == 0:
yield 0
elif i == 1:
yield i/3.0
elif i == indexList[-2]:
yield indexList[-3] - (1 / 3.0)
elif i == indexList[-1]:
yield i-2
else :
yield i-1
for i in myGenerator(12):
print(i)
但似乎不干净......还有另外一种方法吗?
答案 0 :(得分:3)
我将分段构建范围:
from itertools import chain
def myGenerator(index):
return chain([0, 1 / 3.0], xrange(1, index - 3), [index - 3 - 1 / 3.0, index - 3])
list(myGenerator(12))
[0, 0.33333333333333331, 1, 2, 3, 4, 5, 6, 7, 8, 8.6666666666666661, 9]
答案 1 :(得分:3)
如果你想接近原来的想法,但没有“if ... elif ... else”结构:
def myGenerator(index) :
yield 0
yield 1/3.0
for i in xrange(1, index-3):
yield i
yield index - 3 - 1/3.0
yield index - 3