この「トリック」は、スライス操作をシーケンスに適用する特定の例です。これを使用して、リストまたはタプルの逆コピーを作成することもできます。同じファミリの別の「トリック」:[:]
は、リストの(浅い)コピーを作成するためによく使用されます。
「Python 2.3の新機能」は、予期せぬ迷路のエントリポイントです。より明白な(?)の場所、current 2.X documentation for sequence objectsから始めましょう。
オペレーション= s [i:j:k]、結果= "ステップkのiからjへのスライス"、およびノート= "(3 )(5)」。
注3は、 "iまたはjが負の場合、インデックスは文字列の最後に相対的です。len(s)+ iまたはlen(s)+ jが代入されますが、-0はまだ0です。 "
注5は、「ステップkのiからjへのsのスライスは、インデックスx = i + n * kを持つアイテムのシーケンスとして定義され、0 < = n <(ji)/ kとなります。 i、j + 1 * k、i + 2 * k、i + 3 * kなどとなり、jに達したときに停止するがjを含まない場合、iまたはjがlen(s) IまたはJを省略又はなし、それらは(kの符号に依存端)「終了」値となっていない場合。LEN(S)を使用する。注、kはゼロにすることはできません。kはいずれもない場合、それは1のように扱われます。 "
我々は、K == -1を持っているので、使用されるインデックスは、I-1、I-2、I-3及びJに達したときにように、停止(しかし決して含まないj)はIです。観察された効果を得るために、iに使用される "end"値はlen(s)-1
でなければならず、jに使用される "end"値は-1でなければならない。したがって、使用されるインデックスはlast、last-1、...、2、1です。
別のエントリポイントが[::-1]
言語には存在しなかった場合、我々は、任意の配列のために、このような結果をもたらす可能性がある方法を検討することです。
def reverse_traversal_of_sequence(s):
for x in range(len(s) - 1, -1, -1):
do_something_with(s[x])
このソートはどのように? –
「ソート」から「リバーサル」に変更してもいいですが、「インプレース」でもありません。変数 'string'は同じままです。 –
@DavidRobinsonそれを指摘していただきありがとうございます。私の先入観は、私が実現した以上に私を抱きしめていたようです。 – Droogans