45

Pythonで100までの数列「1,2,5,6,9,10......」を生成するにはどうすればよいですか?カンマ('、')を含める必要もありますが、これは主な問題ではありません。

シーケンス:1..100からのすべての数値、4で割り切れ、余りは1または2。

4

9 に答える 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,...'
于 2012-06-16T15:53:04.320 に答える
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)))
于 2012-06-16T15:56:29.490 に答える
13

あなたが期待している正確なシーケンスに関するいくつかの推測が含まれています:

>>> 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と互換性があります)

于 2012-06-16T15:56:25.627 に答える
2

これは、増分ではなくリストの%プロパティを利用することで機能します。

for num in range(1,100):
    if num % 4 == 1 or num % 4 ==2:
        n.append(num)
        continue
    pass
于 2016-01-03T14:42:43.020 に答える
2

numpyとリスト内包表記を使用すると、

import numpy as np
[num for num in np.arange(1,101) if (num%4 == 1 or num%4 == 2)]
于 2017-07-27T01:05:22.783 に答える
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)
于 2012-06-16T15:57:55.190 に答える
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が私のものよりも良い答えだと思います。

于 2012-06-16T16:05:27.470 に答える
-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
于 2017-07-28T13:37:50.840 に答える
-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]+',' 
于 2012-06-16T16:08:30.387 に答える