python:创建一个不规则的迭代器

时间:2013-05-22 16:09:38

标签: python arrays sequence

这是一个绊脚石。如何创建以下序列:

x = 3,4,9,10, ..., 6k+3, 6k+4

所以我可以在其他地方使用它:

y = [something(i) for i in x]

有什么想法吗?我似乎无法想到一个。

3 个答案:

答案 0 :(得分:6)

@JasonS的答案最具可读性,但这是一个很好的单行

def F(N):
    return (6*(i//2) + 3+(i%2) for i in xrange(N))

>>> list(F(10))
[3, 4, 9, 10, 15, 16, 21, 22, 27, 28]

答案 1 :(得分:4)

嗯,我最后只是这样做了

def indicesGenerator(N):
    for i in xrange(0, N, 6):
        yield i+3
        yield i+4

答案 2 :(得分:2)

这里的问题是你的函数需要返回两个值,这意味着你将获得一个元组列表,而不是你想要的平面值列表。 itertools.chain救援!

from itertools import chain

def something(x):
    return 6 * x + 3, 6 * x + 4

x = [3, 5, 7]
y = list(chain.from_iterable(something(i) for i in x))