Python:通过交替值递增的简单方法?

时间:2016-08-31 05:36:55

标签: python increment

我正在构建一个整数列表,它应该增加2个交替值。

例如,从0开始,在4到2之间交替到20,这将使:

[0,4,6,10,12,16,18]

range和xrange仅接受增量值的单个整数。最简单的方法是什么?

5 个答案:

答案 0 :(得分:13)

我可能会使用一个简单的itertools.cycle来循环执行这些步骤:

from itertools import cycle
def fancy_range(start, stop, steps=(1,)):
    steps = cycle(steps)
    val = start
    while val < stop:
        yield val
        val += next(steps)

你会这样称呼它:

>>> list(fancy_range(0, 20, (4, 2)))
[0, 4, 6, 10, 12, 16, 18]

这里的优势在于可以很好地扩展到任意数量的步骤(虽然我现在无法想到这个步骤的好用 - 但也许你可以)。

答案 1 :(得分:6)

您可以使用列表推导和模数运算符来做这样聪明的事情。例如:

/Users/***/Library/Developer/CoreSimulator/Devices/4420949E-AD14-4A4F-9153-53891734BEB9/data/Containers/Data/Application/0A18183F-2CF6-4D72-938D-DF59CFA48CCF

答案 2 :(得分:1)

l = []
a = 0
for i in xrnage (N) :
    a += 2
    if i&1 == 0 :
        a+=2
    l.append (a)

看起来很简单。

答案 3 :(得分:0)

这可能是灵活的解决方案,适用于任何范围。

def custom_range(first, second, range_limit):
    start , end = range_limit
    step = first + second
    a = range(start, end, step)
    b = range(first, end, step)
    from itertools import izip_longest
    print [j for i in izip_longest(a,b) for j in i if j!=None]

custom_range(4,2,(0,19))
custom_range(6,5,(0,34))

输出:

[0, 4, 6, 10, 12, 16, 18]
[0, 6, 11, 17, 22, 28, 33]

答案 4 :(得分:0)

1生成一个从0到n的数字范围,步长为4 2生成另一个从0到n的数字范围,步长为6 3合并列表并排序。删除重复

div