在Python中生成一系列数字

47

我怎样在Python中生成“1,2,5,6,9,10......”直到100的数字序列?

我甚至需要包含逗号(','),但这不是主要问题。

序列:从1到100的每个数,除以4余1或2。

9个回答

41

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,...'

2
Oleh Prypin 提供了 Python 3 版本。 - dǝɥɔS ʇoıןןƎ

20
>>> ','.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'

这是一个快速且比较简单的解决方案。

现在,为不同类型的进度问题提供适用的解决方案:

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

这里是使用 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)))

一行代码,谢谢!真的很好!最初我认为这个东西有点奇怪 'odd = []' 'even = []' 'for c in range(0,100):' 'if c%2==0:' 'odd.append(c)''for c in range(0,100):' 'if c%2==1:' 'even.append(c)''for c in range(0, 50):' 'if c % 2 == 0:' 'print(even[c],end=",")' 'else:' 'print(odd[c],end=",")' 是的,我是新手。但我知道肯定有更好的方法!谢谢大家! - user1460818
非常欢迎对最终函数进行进一步的描述。 - Wolfpack'08

15

包含了一些对你期望的确切序列的猜测:

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

作为一行代码实现:

>>> ','.join(map(str, sorted(list(range(1, 100, 4))) + list(range(2, 100, 4))))

(顺便提一句,这是兼容Python 3的)


2
使用numpy和列表推导式,您可以完成以下操作:
import numpy as np
[num for num in np.arange(1,101) if (num%4 == 1 or num%4 == 2)]

2
这是通过利用列表的%属性而不是增量来实现的。
for num in range(1,100):
    if num % 4 == 1 or num % 4 ==2:
        n.append(num)
        continue
    pass

0
假设我猜测的模式正确(交替增加1和3),这应该会产生所需的结果:
def sequence():
    res = []
    diff = 1
    x = 1
    while x <= 100:
        res.append(x)
        x += diff
        diff = 3 if diff == 1 else 1
    return ', '.join(res)

0
假设你的序列在1和3之间交替增加。
numbers = [1]
while numbers[-1] < 100:
    numbers.append(numbers[-1] + 1)
    numbers.append(numbers[-1] + 3)

print ', '.join(map(str, numbers))

如果你的序列不同,这可能更容易修改,但我认为poke或BlaXpirit比我的答案更好。


-1
编写一个函数,该函数以数字作为参数,并打印出斐波那契数列直到该数字。
def Series(n):  
    a = 0  
    b = 1  
    print(a)  
    print(b)  
    S = 0  
    for i in range(0,n):  
        if S <= n-1:  
            S = a + b  
            print(S)  
            a = b  
            b = S

-2
在Python 3.1中,您可以以一种方式生成列表。
     lst=list(range(100))
     for i in range(100)
        print (lst[i],',',end='')

在Python 2.7中,您可以这样做:
     lst=range(100)
     for i in range(100)
        print lst[i]+',' 

你为什么要迭代一个单独的范围对象?你应该直接迭代列表项。 - poke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接