Pythonでリストやタプルをスライスするときの書き方を紹介してます。スライスとは何かやインデックスの覚え方も解説しています。
スライスとは?
リストのスライスとはリストを指定したインデックスで区切ることです。文字列に対して行うスライスと同じです。
- シーケンスなオブジェクトはスライスできる
- シーケンスとは要素に整数のインデックスが割り振られているもの
- リスト、タプル、文字列などはシーケンスなのでスライス可能
- 辞書はマッピングなので付加
前からスライスする方法
- 「リスト[スタート:ストップ]」
- コロン(:)を使って書く
- スタートとストップのインデックスを指定する。
- 片方だけでもOK
- スタートのインデックスの要素は含まれる
- ストップのインデックスの要素は含まれない
- インデックスを超えると自動で調節する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
>>> spam = ['a', 'b', 'c', 'd', 'e'] >>> spam[2:4] ['c', 'd'] #スタートのみ指定 >>> spam[2:] ['c', 'd', 'e'] #ストップのみ指定 >>> spam[:4] ['a', 'b', 'c', 'd'] #インデックスを超えてもOK >>> spam[2:10] ['c', 'd', 'e'] |
スタートのみ指定すると最後までの要素が取り出され、ストップのみ指定すると最初からの要素が取り出されます。
最後の例のように、スタートとストップにインデックスを超える値を指定すると自動で調節してくれます。
タプルのスライスも同じ書き方でできます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
>>> humm = ('a', 'b', 'c', 'd', 'e') >>> humm[2:4] ('c', 'd') #スタートのみ指定 >>> humm[2:] ('c', 'd', 'e') #ストップのみ指定 >>> humm[:4] ('a', 'b', 'c', 'd') #インデックスを超えてもOK >>> humm[2:10] ('c', 'd', 'e') |
後ろからスライスする方法
書き方は先ほどと同じで、スタートとストップに負のインデックスを渡すだけで逆からスライスできます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
>>> spam = ['a', 'b', 'c', 'd', 'e'] >>> spam[-4:-2] ['b', 'c'] #スタートのみ指定 >>> spam[-4:] ['b', 'c', 'd', 'e'] #ストップのみ指定 >>> spam[:-2] ['a', 'b', 'c'] #スタートとストップの順序に注意 >>> spam[-2:-4] [] |
スライスの覚え方
指定したインデックスどこで区切られるかは上の図を参考にしてください。
正のインデックスを指定したら、その要素の前で区切られます。負のインデックスならその要素の後ろで区切られています。
文字列のスライスと同じ方法ですね。
Pythonの文字列をスライスする方法とそのときに指定するインデックスの覚え方も紹介します。リストやタプルのスライスとほぼ同じ要領でスライスできます。 今回は文字列のオブジェクトの性質も合わせて解説しています。参考になれば幸いです。[…]
スライスでコピーする方法
- スタートとストップを指定しないとコピーできる
- 浅いコピーを作る
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
>>> spam = ['a', 'b', 'c', 'd', 'e'] #コピーを作る >>> humm = spam[:] >>> humm ['a', 'b', 'c', 'd', 'e'] #コピーを変更 >>> humm.append('f') >>> humm ['a', 'b', 'c', 'd', 'e', 'f'] #元は変わっていない >>> spam ['a', 'b', 'c', 'd', 'e'] |
コピーを「humm」に代入しています。このhummに要素を追加すると、hummだけが変更され元のspamは変更されていません。
これを浅いコピーと言います。リストのコピーはメソッドを使って行うこともできます。
まとめ
- スライスでリストを区切れる
- 「リスト[スタート:ストップ]」と書く
- スライスでコピーできる
- 浅いコピーを返す
- コンテナ4種類「リスト・タプル・辞書・セット」とは?
- リストとは?インデックス・要素数・結合する方法を解説
- リストに使えるメソッド11個「追加・削除・ソート」
- for文でリストのインデックスと要素を取り出す(enumerate)
- リストで内包表記する方法「for・if・lambdaの書き方」
- タプルとは?追加・削除・結合・リストに変換する方法
- リスト・タプルをスライスする方法とインデックスの覚え方
- 辞書とは?追加・削除・上書きする方法
- 辞書に使えるメソッド5個(keys・values・items・get・setdefault)
- for文で辞書のキー・バリューを取り出す方法(enumerate・items・keys・values)
プログラミング言語のなかでも人気の高いPythonを学習する教材を紹介します。 最近ではプログラミングスククールがたくさんあるので迷うと思います。 ですが、まずは無料教材から始めてみましょう。苦労した分だけ力がつきます。 […]