1

私はこれを返す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)

しかし、それはきれいではないようです...別の方法はありますか?

4

2 に答える 2

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]
于 2012-08-22T09:39:05.980 に答える
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
于 2012-08-22T12:42:39.183 に答える