次の例では:
foo = ['red', 'white', 'blue', 1, 2, 3]
ここで:foo[0:6:1]
は、fooのすべての要素を出力します。しかしながら、 foo[6:0:-1]
は、1番目または0番目の要素を省略します。
>>> foo[6:0:-1]
[3, 2, 1, 'blue', 'white']
Foo.reverse()またはfoo [::-1]を使用してリストを逆に印刷できることを理解していますが、foo [6:0:-1]がリスト全体を印刷しない理由を理解しようとしています。 ?
要するにスライス表記:
[ <first element to include> : <first element to exclude> : <step> ]
リストを反転するときに最初の要素を含める場合は、次のように中央の要素を空のままにします。
foo[::-1]
Python一般的なスライスについての良い情報もここにあります:
Pythonのスライス表記を説明する
スライス表記を思い出せない場合は、 Hokey Cokey を試してみてください。
[In:Out:Shake it all about about]
[最初の要素in clude:残す最初の要素out:step使用する]
YMMV
...なぜfoo [6:0:-1]はリスト全体を印刷しないのですか?
中間値は包括的ではなく、exclusiveの停止値であるためです。 間隔表記 は[開始、停止)です。
これはまさに[x] rangeの仕組みです:
>>> range(6, 0, -1)
[6, 5, 4, 3, 2, 1]
これらは結果のリストに含まれるインデックスであり、最初のアイテムには0は含まれません。
>>> range(6, -1, -1)
[6, 5, 4, 3, 2, 1, 0]
別の見方は次のとおりです。
>>> L = ['red', 'white', 'blue', 1, 2, 3]
>>> L[0:6:1]
['red', 'white', 'blue', 1, 2, 3]
>>> len(L)
6
>>> L[5]
3
>>> L[6]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
インデックス6は、Lの有効なインデックス(正確には1つ前)を超えているため、除外されるストップ値として範囲から除外されます。
>>> range(0, 6, 1)
[0, 1, 2, 3, 4, 5]
リスト内の各アイテムのインデックスを引き続き提供します。
この答えは少し時代遅れかもしれませんが、同じ問題で立ち往生している人にとっては役に立つかもしれません。次のように2番目のインプレーススライスを適用して、インデックスが0までの任意の終わりの逆リストを取得できます。
>>> L = list(range(10))
>>> L
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> (start_ex, end) = (7, 0)
>>> L[end:start_ex][::-1]
[6, 5, 4, 3, 2, 1, 0]
つかいます
>>>foo[::-1]
これは、リストの最後の要素から最初までの逆を表示します。