私は2つの値を交互に増やすべき整数のリストを作成しています。例えばPython:値を交互に増やす簡単な方法は?
、0から始まり20まで4と2との間で交互にすることになるだろう:
[0,4,6,10,12,16,18]
範囲はxrangeだけインクリメント値の単一の整数を受け入れます。これを行う最も簡単な方法は何ですか?
私は2つの値を交互に増やすべき整数のリストを作成しています。例えばPython:値を交互に増やす簡単な方法は?
、0から始まり20まで4と2との間で交互にすることになるだろう:
[0,4,6,10,12,16,18]
範囲はxrangeだけインクリメント値の単一の整数を受け入れます。これを行う最も簡単な方法は何ですか?
私は手順を順番に簡単な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]
利点は、つまりです(しかし、私は現時点でそれをうまく利用することは実際には考えられませんが、おそらくそうすることができます)。
l = []
a = 0
for i in xrnage (N) :
a += 2
if i&1 == 0 :
a+=2
l.append (a)
見た目はシンプルです。
リスト内包とモジュラス演算子を使って、そのような巧妙なことを行うことができます。たとえば:
>>> [3*i + i%2 for i in range(10)]
[0, 4, 6, 10, 12, 16, 18, 22, 24, 28]
これは、柔軟性があり、どの範囲でも機能するソリューションです。
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]
1組み合わせるステップサイズ6 3を0からnまでの数の別の範囲を生成する4 2ステップサイズで0からnまでの番号の範囲を生成両方リストとソート。重複を削除する
>>> a = range(0,20,4)
>>> a
[0, 4, 8, 12, 16]
>>> b = range(0,20,6)
>>> c = sorted(a + b)
>>> b
[0, 6, 12, 18]
>>> c
[0, 0, 4, 6, 8, 12, 12, 16, 18]
>>> c = list(set(c))
>>> c
[0, 4, 6, 8, 12, 16, 18]
ありがとう、これは私が探していたものです。ステップのスケーリングは、実際に私のニーズに完璧です。 – isticism
確かにニースのソリューション。 –