I try to create a generator in python who returns this :
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]This is what I have at the moment :
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-1for i in myGenerator(12): print(i)But it seems not clean ... Is there another way around?
- You can't pass a generator to the
xrangefunction; not sure what you wanted to achieve with that?Martijn Pieters– Martijn Pieters2012-08-22 09:29:07 +00:00CommentedAug 22, 2012 at 9:29 - That was a mistake .. It's for a script who generate the position of NURBS CVs in Maya.MObject– MObject2012-08-22 09:33:36 +00:00CommentedAug 22, 2012 at 9:33
- 1what exactly are you trying to do ? it seems like a very odd list to generateInbar Rose– Inbar Rose2012-08-22 09:37:21 +00:00CommentedAug 22, 2012 at 9:37
- python wise, this seems ok, if you can write your algorithm in a more efficient way, i don't know, since I don't understand it.schacki– schacki2012-08-22 09:40:14 +00:00CommentedAug 22, 2012 at 9:40
2 Answers2
I'd construct the range piecewise:
from itertools import chaindef 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] Sign up to request clarification or add additional context in comments.
Comments
If you want to stay close to your original idea but without the "if...elif...else" structure:
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 - 3Comments
Explore related questions
See similar questions with these tags.