8

重複の可能性:
Python decimal range() ステップ値

次のようなリストを生成したいと思います。

[0, 0.05, 0.1, 0.15 ... ]

range(0, 1, 0.05)は素晴らしいでしょうが、次の理由で機能しません。

range() 整数のステップ引数が必要ですが、float を取得しました。

エレガントなアイデアはありますか?;)

4

5 に答える 5

6

numpyを使用できる場合は、を使用することをお勧めしますnumpy.linspacerangenumpy自身を含め、浮動小数点数にロジックを適合させようとする関数はarange、通常、終了境界がリストに含まれるかどうかに関して混乱します。linspace開始点、終了点、および必要な要素数を明示的に指定することで、これをエレガントに解決します。

>>> import numpy
>>> numpy.linspace(0.0, 1.0, 21)
array([ 0.  ,  0.05,  0.1 ,  0.15,  0.2 ,  0.25,  0.3 ,  0.35,  0.4 ,
        0.45,  0.5 ,  0.55,  0.6 ,  0.65,  0.7 ,  0.75,  0.8 ,  0.85,
        0.9 ,  0.95,  1.  ])
于 2012-09-13T09:51:41.117 に答える
5

Python 3では、rangeはジェネレーター(不変シーケンス)を返します...したがって、次のような非常に単純な関数を定義できると思います。

def frange(start,stop, step=1.0):
    while start < stop:
        yield start
        start +=step

それで:

for x in frange(0, 1, 0.05):
   print(x)

Pythonはトリッキーである必要はありません。

リストが必要な場合は、次の電話番号に電話してください。

list(frange(0,1,0.05))

または、関数を変更して、リストをすぐに返します。

乗算または他の処理を行う1行のソリューションを使用できますが、開始値と終了値が異なると注意が必要になる場合があります。このような範囲を頻繁に使用する場合は、関数を使用して再利用するだけです。コード上で何度も繰り返されるワンライナーでさえ悪いです。

于 2012-09-13T11:02:31.167 に答える
3

またはこれはどうですか:

[v*0.05 for v in range(0,int(1/0.05))]
于 2012-09-13T09:46:34.740 に答える
1

これはどう:

temp = range(0,100,5) # 0,5,10,...,95
final_list = map(lambda x: x/100.0,temp) # becomes 0,0.05,0.10,...,0.95

あまりエレガントではありませんが、きちんと機能させることに悩んだことはありません。また、ステップサイズが合理的である場合にのみ機能します。利点は、その場で実行するのに十分な速さであるということです。

より一般的でエレガントなソリューションについては、OPへのコメントを参照してください。

于 2012-09-13T09:43:43.790 に答える
1

どうしたの

[i/100.0 for i in range(0, 100, 5)]

? 必要な桁数 (ここでは 2 つ) を確認し、適切な乗数 (1 は 100 になり、0.05 は 5 になります) を計算します。

于 2012-09-13T09:49:55.703 に答える