シーケンスとインデクシングとスライシング

(0, 1, 2, 3)を(1, 2, 3, 0)にする方法は、以下が一番簡単だと思われる。

>>> a = (0, 1, 2, 3)
>>> a[1:] + a[0:1]
(1, 2, 3, 0)

結局、2つのスライシングで取り出したタプルを単に結合している。しかし、新たなタプルを作成しているので効率はあまり良くない。


イミュータブル(変更不能)なシーケンスを効率良く変更するには、いったんミュータブルなオブジェクトに型変換してから、値を変更し、元の型に戻す。
例えば、文字列とタプルはイミュータブルなので、共にリストに変換してから値を変更すると効率が良い。しかし、面倒だし、変換のオーバーヘッドもかかるので、長いシーケンスを効率良く処理したい場合のみ行えば十分と思われる。


また、異なったシーケンス同士は、+演算子で結合できない。通常使用するシーケンスは安全面からタプルにしておきたいところであるが、結合を考えた場合、リストと混在させることができない。逆に、リストを通常に使用すると安全面では不利である。
通常はタプルを使用しておき、値を変更したいタイミングでリストに変換することもできるが、そういうポリシーで良いのかは今後、調査するつもり。