数字を含むリストを作成しようとして1-1000
います。明らかに、これは書き込み/読み取りが面倒なので、範囲を含むリストを作成しようとしています。Python 2 では、次のようです。
some_list = range(1,1000)
うまくいきましたが、Python 3 の範囲は Python 2 の範囲と似ていxrange
ますか?
誰でもこれについて洞察を提供できますか?
数字を含むリストを作成しようとして1-1000
います。明らかに、これは書き込み/読み取りが面倒なので、範囲を含むリストを作成しようとしています。Python 2 では、次のようです。
some_list = range(1,1000)
うまくいきましたが、Python 3 の範囲は Python 2 の範囲と似ていxrange
ますか?
誰でもこれについて洞察を提供できますか?
範囲オブジェクトからリストを作成できます。
my_list = list(range(1, 1001))
これは、python2.xのジェネレーターでも同様に行う方法です。通常、リストは必要ありませんが、my_list[i]
より効率的に(i + 1
)の値を取得できるため、リストを繰り返す必要がある場合は、に頼ることができますrange
。
xrange
また、python2.xでは、引き続きインデックス可能1であることに注意してください。これは、range
python3.xでも同じプロパティ2を持っていることを意味します
1print xrange(30)[12]
はpython2.xで動作します
2 python3.xの1に類似したステートメントはprint(range(30)[12])
であり、それも機能します。
Python 3.x では、range()
関数は独自の型を取得しました。したがって、この場合、イテレータを使用する必要があります
list(range(1000))
リストで1から1000までの数字を使用する必要はありません。しかし、何らかの理由でこれらの番号が本当に必要な場合は、次のようにすることができます。
[i for i in range(1, 1001)]
一言で言えばリスト内包表記:
上記のリスト内包表記は次のように解釈されます。
nums = []
for i in range(1, 1001):
nums.append(i)
これは、2.xからのものですが、単なるリスト内包表記構文です。これはPython3で機能することはわかっていますが、アップグレードされた構文があるかどうかはわかりません
範囲は最初のパラメーターを含めて開始します。ただし、2番目のパラメーターを含まないで終了します(2つのパラメーターが指定されている場合、最初のパラメーターが省略されている場合は、「0」から開始されます)
range(start, end+1)
[start, start+1, .., end]
実際、1-1000(両端を含む)が必要な場合は、range(...)
パラメーター1および1001を含む関数を使用しますrange(1, 1001)
。これは、range(start, end)
関数が開始から(end-1)までを含むためです。
実際、これは Python2 と比較して、Python3 のレトロ グラデーションです。確かに、それぞれ list(range()) と range() を使用する Python3 よりも、range() と xrange() を使用する Python2 の方が便利です。その理由は、Python3 の元の設計者があまり経験がなく、メモリと CPU の両方が非効率な多数の要素を反復処理する多くの初心者による範囲関数の使用のみを考慮したためです。しかし、彼らは数値リストを作成するための範囲関数の使用を無視しました。今、彼らがすでに元に戻るには遅すぎます。
私が Python3 の設計者になるとしたら、次のことを行います。
それが最適なはずです。