1. ホーム
  2. パイソン

[解決済み】range(start, end)にendが含まれないのはなぜ?

2022-03-24 06:38:50

質問

>>> range(1,11)

は、あなたに

[1,2,3,4,5,6,7,8,9,10]

なぜ1-11ではないのか?

適当に決めたのか、それとも私の知らない価値があるのか。

解決方法は?

を呼び出す方が一般的だからです。 range(0, 10) を返す [0,1,2,3,4,5,6,7,8,9] に等しい10個の要素を含んでいます。 len(range(0, 10)) . プログラマは0ベースのインデックスを好むことを覚えておいてください。

また、次のような一般的なコード・スニペットも考えてみましょう。

for i in range(len(li)):
    pass

があればわかるかな? range() がちょうど len(li) というのは、問題があるのでしょうか?プログラマは明示的に1を引く必要があります。これは、プログラマーが for(int i = 0; i < 10; i++) を超える for(int i = 0; i <= 9; i++) .

1から始まる範囲を頻繁に呼び出す場合は、独自の関数を定義した方がよいでしょう。

>>> def range1(start, end):
...     return range(start, end+1)
...
>>> range1(1, 10)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]