在Python中生成一系列数字

use*_*818 38 python sequence

如何在Python中生成数字序列"1,2,5,6,9,10 ......",直到100?我甚至需要包含逗号(','),但这不是主要问题.

序列:1到100之间的每个数字,可被4整除,其余为1或2.

Ale*_*gov 39

1,2,5,6,9,10 ...中的每个数字都可被4整除,余数为1或2.

>>> ','.join(str(i) for i in xrange(100) if i % 4 in (1,2))
'1,2,5,6,9,10,13,14,...'
Run Code Online (Sandbox Code Playgroud)

  • Oleh Prypin提供了Python 3版本 (2认同)

Ole*_*pin 17

>>> ','.join('{},{}'.format(i, i + 1) for i in range(1, 100, 4))
'1,2,5,6,9,10,13,14,17,18,21,22,25,26,29,30,33,34,37,38,41,42,45,46,49,50,53,54,57,58,61,62,65,66,69,70,73,74,77,78,81,82,85,86,89,90,93,94,97,98'
Run Code Online (Sandbox Code Playgroud)

这是一个快速而又非常糟糕的解决方案.

现在,针对适合不同类型的进展问题的解决方案:

def deltas():
    while True:
        yield 1
        yield 3
def numbers(start, deltas, max):
    i = start
    while i <= max:
        yield i
        i += next(deltas)
print(','.join(str(i) for i in numbers(1, deltas(), 100)))
Run Code Online (Sandbox Code Playgroud)

以下是使用itertools实现的类似想法:

from itertools import cycle, takewhile, accumulate, chain

def numbers(start, deltas, max):
    deltas = cycle(deltas)
    numbers = accumulate(chain([start], deltas))
    return takewhile(lambda x: x <= max, numbers)

print(','.join(str(x) for x in numbers(1, [1, 3], 100)))
Run Code Online (Sandbox Code Playgroud)


pok*_*oke 11

包括猜测您期望的确切顺序:

>>> l = list(range(1, 100, 4)) + list(range(2, 100, 4))
>>> l.sort()
>>> ','.join(map(str, l))
'1,2,5,6,9,10,13,14,17,18,21,22,25,26,29,30,33,34,37,38,41,42,45,46,49,50,53,54,57,58,61,62,65,66,69,70,73,74,77,78,81,82,85,86,89,90,93,94,97,98'
Run Code Online (Sandbox Code Playgroud)

作为单线:

>>> ','.join(map(str, sorted(list(range(1, 100, 4))) + list(range(2, 100, 4))))
Run Code Online (Sandbox Code Playgroud)

(顺便说一句,这与Python 3兼容)