1

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-1

for i in myGenerator(12):
    print(i)

But it seems not clean ... Is there another way around?

4
  • You can't pass a generator to the xrange function; not sure what you wanted to achieve with that? Commented Aug 22, 2012 at 9:29
  • That was a mistake .. It's for a script who generate the position of NURBS CVs in Maya. Commented Aug 22, 2012 at 9:33
  • 1
    what exactly are you trying to do ? it seems like a very odd list to generate Commented Aug 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. Commented Aug 22, 2012 at 9:40

2 Answers 2

3

I'd construct the range piecewise:

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]
Sign up to request clarification or add additional context in comments.

Comments

3

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 - 3

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.