回答:
を使用しrange
ます。Python 2.xではリストを返すので、必要なのは次のとおりです。
>>> range(11, 17)
[11, 12, 13, 14, 15, 16]
Python 3.xではrange
イテレータです。だから、あなたはそれをリストに変換する必要があります:
>>> list(range(11, 17))
[11, 12, 13, 14, 15, 16]
注:2番目の数値は排他的です。だから、ここでそれは16+1
= である必要があります17
編集:
ずつ増加についての質問に対応するために0.5
、最も簡単なオプションは、おそらく使用することですnumpyののを arange()
して.tolist()
:
>>> import numpy as np
>>> np.arange(11, 17, 0.5).tolist()
[11.0, 11.5, 12.0, 12.5, 13.0, 13.5,
14.0, 14.5, 15.0, 15.5, 16.0, 16.5]
step
パラメーターを使用して1を超えてインクリメントできますが、それは浮動小数点数ではなくintです。標準のlibではそれを正確に行うことはできません。
あなたが探しているようですrange()
:
>>> x1=11
>>> x2=16
>>> range(x1, x2+1)
[11, 12, 13, 14, 15, 16]
>>> list1 = range(x1, x2+1)
>>> list1
[11, 12, 13, 14, 15, 16]
の0.5
代わりにでインクリメントするには1
、次のように言います。
>>> list2 = [x*0.5 for x in range(2*x1, 2*x2+1)]
>>> list2
[11.0, 11.5, 12.0, 12.5, 13.0, 13.5, 14.0, 14.5, 15.0, 15.5, 16.0]
list
、変数として使用します。
list
では組み込みクラスであるため、変数としての使用はやや推奨されていません
float型で機能する関数のような範囲を探しているなら、ここに非常に良い記事があります。
def frange(start, stop, step=1.0):
''' "range()" like function which accept float type'''
i = start
while i < stop:
yield i
i += step
# Generate one element at a time.
# Preferred when you don't need all generated elements at the same time.
# This will save memory.
for i in frange(1.0, 2.0, 0.5):
print i # Use generated element.
# Generate all elements at once.
# Preferred when generated list ought to be small.
print list(frange(1.0, 10.0, 0.5))
出力:
1.0
1.5
[1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5.0, 5.5, 6.0, 6.5, 7.0, 7.5, 8.0, 8.5, 9.0, 9.5]
Pythonでリスト内包表記を使用します。リストにも16が必要なので、x2 + 1を使用します。範囲関数は、関数の上限を除外します。
list = [x for x in range(x1、x2 + 1)]]
range()
リスト内包表記を使用する必要がない場合
list(range(x1, x2+1))
。
Pythonではこれを非常に簡単に行うことができます
start=0
end=10
arr=list(range(start,end+1))
output: arr=[0,1,2,3,4,5,6,7,8,9,10]
または、指定された数までの配列を返す再帰関数を作成できます。
ar=[]
def diff(start,end):
if start==end:
d.append(end)
return ar
else:
ar.append(end)
return diff(start-1,end)
出力:ar = [10,9,8,7,6,5,4,3,2,1,0]
これを行う最もエレガントな方法はrange
関数を使用することですが、このロジックを再作成したい場合は、次のようなことができます。
def custom_range(*args):
s = slice(*args)
start, stop, step = s.start, s.stop, s.step
if 0 == step:
raise ValueError("range() arg 3 must not be zero")
i = start
while i < stop if step > 0 else i > stop:
yield i
i += step
>>> [x for x in custom_range(10, 3, -1)]
これは出力を生成します:
[10, 9, 8, 7, 6, 5, 4]
以前に@Jaredによって表現されたように、最善の方法はrange
またはを使用numpy.arrange
することですが、共有したいコードは興味深いと思います。
[x for x in range(10, 3, 1)]
最初の引数は開始、2番目は終了、最後はステップです。==>停止>開始
上記のすべての答えは、範囲が正の数値のみであることを前提としています。オプションのステップ値(デフォルト= 1)を設定する可能性がある、引数が任意(正または負)の連続番号のリストを返すソリューションは次のとおりです。
def any_number_range(a,b,s=1):
""" Generate consecutive values list between two numbers with optional step (default=1)."""
if (a == b):
return a
else:
mx = max(a,b)
mn = min(a,b)
result = []
# inclusive upper limit. If not needed, delete '+1' in the line below
while(mn < mx + 1):
# if step is positive we go from min to max
if s > 0:
result.append(mn)
mn += s
# if step is negative we go from max to min
if s < 0:
result.append(mx)
mx += s
return result
たとえば、標準のコマンドlist(range(1,-3))
は空のリストを返しますが、[]
この関数は[-3,-2,-1,0,1]
更新:ステップがマイナスになる可能性があります。コメントをありがとう、@ Michael。
i_min = -3, i_max = 1
any_number_range(i_max, i_min))
返されるため、改善の例は素晴らしいと思いますが[-3,-2,-1,0,1]
、組み込みlist(range(i_min, i_max + 1))
は同じ値を返します。
list(range(1,-3, -1))