236

数字を含むリストを作成しようとして1-1000います。明らかに、これは書き込み/読み取りが面倒なので、範囲を含むリストを作成しようとしています。Python 2 では、次のようです。

some_list = range(1,1000)

うまくいきましたが、Python 3 の範囲は Python 2 の範囲と似ていxrangeますか?

誰でもこれについて洞察を提供できますか?

4

9 に答える 9

298

範囲オブジェクトからリストを作成できます。

my_list = list(range(1, 1001))

これは、python2.xのジェネレーターでも同様に行う方法です。通常、リストは必要ありませんが、my_list[i]より効率的に(i + 1)の値を取得できるため、リストを繰り返す必要がある場合は、に頼ることができますrange

xrangeまた、python2.xでは、引き続きインデックス可能1であることに注意してください。これは、rangepython3.xでも同じプロパティ2を持っていることを意味します

1print xrange(30)[12]はpython2.xで動作します

2 python3.xの1に類似したステートメントはprint(range(30)[12])であり、それも機能します。

于 2012-07-14T00:48:39.323 に答える
27

Python 3.x では、range()関数は独自の型を取得しました。したがって、この場合、イテレータを使用する必要があります

list(range(1000))

于 2015-02-28T18:38:07.523 に答える
19

リストで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]
于 2012-07-14T00:47:28.170 に答える
4

実際、1-1000(両端を含む)が必要な場合は、range(...)パラメーター1および1001を含む関数を使用しますrange(1, 1001)。これは、range(start, end)関数が開始から(end-1)までを含むためです。

于 2012-07-14T00:49:24.843 に答える
-3

実際、これは Python2 と比較して、Python3 のレトロ グラデーションです。確かに、それぞれ list(range()) と range() を使用する Python3 よりも、range() と xrange() を使用する Python2 の方が便利です。その理由は、Python3 の元の設計者があまり経験がなく、メモリと CPU の両方が非効率な多数の要素を反復処理する多くの初心者による範囲関数の使用のみを考慮したためです。しかし、彼らは数値リストを作成するための範囲関数の使用を無視しました。今、彼らがすでに元に戻るには遅すぎます。

私が Python3 の設計者になるとしたら、次のことを行います。

  1. irange を使用してシーケンス イテレータを返す
  2. lrange を使用してシーケンス リストを返す
  3. range を使用して、シーケンス イテレータ (要素数が大きい場合、たとえば range(9999999)) またはシーケンス リスト (要素数が小さい場合、たとえば range(10)) を返します。

それが最適なはずです。

于 2018-02-10T09:44:53.263 に答える