「リストの最初の3つだけ取り出したい」「文字列の後ろ2文字だけ欲しい」——Pythonを勉強していると、こんな場面によく出会いますよね。そんなときに大活躍するのがスライス(slice)です。
スライスを覚えると、for文でわざわざ数えながら取り出さなくても、たった1行でリストや文字列の一部をスッと取り出せるようになります。最初は「コロンの数字の意味がよく分からない…」とつまずきやすいところですが、ルールはとてもシンプルです。
この記事では、Pythonのスライスの基本の書き方から、ステップ指定・マイナス指定・逆順といった応用テクニックまで、初心者の方にも分かりやすく徹底解説します。この記事を読み終わるころには、スライスを自在に使いこなせるようになっているはずです。
コンテンツ
スライスとは?基本の書き方
スライスとは、リストや文字列などの連続したデータの一部を切り出すための機能です。基本の書き方は次のとおりで、角括弧の中にコロン(:)で区切った数字を書きます。
シーケンス[start:stop]startが取り出しを開始する位置、stopが終了する位置です。ここで大切なルールは、startは含み、stopは含まないという点です。実際にリストで試してみましょう。
numbers = [10, 20, 30, 40, 50]
print(numbers[1:4])
# 結果: [20, 30, 40]インデックス(番号)は0から始まることを思い出してください。numbers[1:4]は「インデックス1から、インデックス4の手前まで」という意味なので、20・30・40の3つが取り出されます。インデックス4の50は含まれない点に注意しましょう。
なお、スライスで取り出したデータは元のリストとは別の新しいリストになります。リスト操作の基本についてはPythonでリストに要素を追加する方法の記事もあわせて読むと理解が深まります。
startとstopは省略できる
スライスでは、startやstopを省略することができます。省略した場合は「先頭から」「末尾まで」という意味になります。
numbers = [10, 20, 30, 40, 50]
print(numbers[:3]) # 先頭から3つ -> [10, 20, 30]
print(numbers[2:]) # インデックス2から末尾まで -> [30, 40, 50]
print(numbers[:]) # 全部(コピー) -> [10, 20, 30, 40, 50]numbers[:]のように両方省略すると、リスト全体をコピーできます。これは元のリストを壊さずに扱いたいときに便利なテクニックです。
ステップ(step)で飛ばしながら取り出す
スライスには3つ目の数字としてステップ(step)を指定できます。書き方は次のとおりです。
シーケンス[start:stop:step]stepは「何個おきに取り出すか」を表します。たとえば2を指定すると、1つ飛ばしで取り出せます。
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(numbers[::2]) # 偶数番目 -> [0, 2, 4, 6, 8]
print(numbers[1::2]) # 奇数番目 -> [1, 3, 5, 7, 9]numbers[::2]は「先頭から末尾まで2個おき」という意味になり、偶数番目の要素だけを取り出せます。
マイナスのインデックスで後ろから取り出す
Pythonでは、インデックスにマイナスの数字を使うと後ろから数えた位置を指定できます。一番後ろが-1、その手前が-2です。スライスでもこのマイナス指定が使えます。
word = ['P', 'y', 't', 'h', 'o', 'n']
print(word[-2:]) # 後ろ2つ -> ['o', 'n']
print(word[:-2]) # 後ろ2つを除く -> ['P', 'y', 't', 'h']「末尾のいくつかだけ欲しい」「末尾のいくつかを取り除きたい」といった処理が、マイナス指定を使うととてもスッキリ書けます。
stepにマイナスを指定すると逆順になる
stepにマイナスの値を指定すると、後ろから前に向かって取り出すことになり、結果として並びが逆順になります。[::-1]はリストや文字列を反転させる定番のテクニックです。
numbers = [1, 2, 3, 4, 5]
print(numbers[::-1])
# 結果: [5, 4, 3, 2, 1]文字列でもスライスは使える
スライスはリストだけでなく文字列でも同じように使えます。文字列を1文字ずつのシーケンスとして扱えるので、一部分を取り出すのが簡単です。
text = 'Python'
print(text[0:3]) # 先頭3文字 -> Pyt
print(text[-2:]) # 後ろ2文字 -> on
print(text[::-1]) # 逆順 -> nohtyP文字列の切り出しや加工では、スライスと文字列メソッドを組み合わせると、より柔軟な処理ができるようになります。あわせて覚えておくと便利です。
タプルでもスライスは使える
スライスは、リストや文字列と同じ「シーケンス型」であるタプル(tuple)でも利用できます。ただしタプルは変更できない(イミュータブル)ため、スライスで取り出した結果も新しいタプルになります。
colors = ('赤', '青', '緑', '黄')
print(colors[1:3])
# 結果: ('青', '緑')スライスでリストの一部を書き換える
リストの場合は、スライスで指定した範囲にまとめて代入することもできます。複数の要素を一気に置き換えられるので便利です。
numbers = [1, 2, 3, 4, 5]
numbers[1:3] = [20, 30]
print(numbers)
# 結果: [1, 20, 30, 4, 5]この書き換えは、要素の数が違っても動作します。たとえば2つの範囲に3つの要素を代入すれば、リスト全体の長さも変わります。なお、取り出した要素をまとめて加工したいときはリスト内包表記と組み合わせると、さらに短く書けます。
スライスでよくある間違いと注意点
最後に、初心者の方がつまずきやすいポイントを確認しておきましょう。
- stopの位置は含まれない:
[1:4]はインデックス4を含みません。「終わりの手前まで」と覚えましょう。 - 範囲外を指定してもエラーにならない:
numbers[1:100]のように大きすぎる数字を書いても、エラーではなく「あるところまで」を返してくれます。 - スライスは新しいオブジェクトを作る:元のデータは書き換わりません(代入する場合を除く)。
numbers = [10, 20, 30]
print(numbers[1:100]) # エラーにならない -> [20, 30]
print(numbers[5:10]) # 範囲外 -> [] (空のリスト)もっと効率的にPythonを学びたい人へ
スライスのように「知っていると一気にコードが短くなる」テクニックは、Pythonにはまだまだたくさんあります。独学でも学べますが、「つまずいたときにすぐ質問できる環境が欲しい」「未経験から効率よくPythonを身につけたい」という方には、プログラミングスクールという選択肢もおすすめです。
マンツーマン指導で自分のペースに合わせて学べるスクールなら、エラーで長時間悩む時間を減らし、転職サポートまで受けられます。多くのスクールが無料カウンセリングを用意しているので、まずは気軽に相談してみるとよいでしょう。
※本記事には広告(アフィリエイトリンク)を含みます。
Pythonプログラミング|マンツーマンレッスンで初めてをプロに育てる【Python Winner】![]()
まとめ
今回は、Pythonのスライスの使い方について解説しました。最後に要点を整理しておきましょう。
- スライスは
[start:stop]で、リストや文字列の一部を切り出せる - startは含み、stopは含まないのが基本ルール
- startやstopは省略でき、
[:]で全体のコピーができる [start:stop:step]のstepで飛ばし読みができ、[::-1]で逆順になる- マイナスのインデックスで後ろから取り出せる
- リストならスライスへの代入で一部をまとめて書き換えられる
スライスは、Pythonを書くうえで毎日のように使う超基本テクニックです。ぜひ実際に手を動かして、いろいろな数字を試しながら感覚をつかんでみてくださいね。
ナノトイラボ 