如何在Python中生成数字序列“1,2,5,6,9,10 ......”,直到100? 我甚至需要包含逗号(','),但这不是主要问题。
序列:1到100之间的每个数字,可被4整除,其余为1或2。
答案 0 :(得分:38)
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,...'
答案 1 :(得分:16)
>>> ','.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)))
答案 2 :(得分:10)
包括对您期望的确切顺序的猜测:
>>> 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兼容)
答案 3 :(得分:2)
使用numpy和list comprehension可以执行
import numpy as np
[num for num in np.arange(1,101) if (num%4 == 1 or num%4 == 2)]
答案 4 :(得分:1)
这可以通过利用列表的%属性而不是增量来实现。
for num in range(1,100):
if num % 4 == 1 or num % 4 ==2:
n.append(num)
continue
pass
答案 5 :(得分: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)
答案 6 :(得分: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比我的答案更好。
答案 7 :(得分:-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
答案 8 :(得分:-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]+','