【Python】レッスン4-05:リストのスライスを理解しよう
一つ前のLessonではリストの集計・並べ替えについて学習しました。
今回はリストのスライスについて見ていきましょう。
Lesson1:基礎文法編
Lesson2:制御構造編
Lesson3:関数とスコープ編
Lesson4:データ構造編
・Lesson4-1:リストの定義と要素の追加を理解しよう
・Lesson4-2:リストの要素を削除しよう
・Lesson4-3:リストの情報を調べよう
・Lesson4-4:リストの集計・並べ替えを理解しよう
・Lesson4-5:リストのスライスを理解しよう ◁今回はココ
・Lesson4-6:リストのループ処理を理解しよう
・Lesson4-7:リストの内包表記を理解しよう
・Lesson4-8:リスト・タプル・辞書・集合の概要と違いを理解しよう
・Lesson4-9:タプルの基本を理解しよう
・Lesson4-10:タプルのアンパックを理解しよう
・Lesson4-11:辞書の基本を理解しよう
・Lesson4-12:辞書のループ処理を理解しよう
・Lesson4-13:辞書の内包表記を使ってリストから辞書を作ろう
・Lesson4-13:集合(セット)の基本を理解しよう
・練習問題4-1:宝探しゲームを作ろう
・練習問題4-2:ナインゲームを作ろう
・練習問題4-3:マルバツゲームを作ろう
Lesson5:オブジェクト指向編
次のステップ:Python基礎習得者にお勧めの道5選(実務or副業)
スライス構文の基本とよくある使い方パターン
スライス とは、リストから要素を抽出・複製・置換・削除まで行える基本テクニックです。
本記事ではリストに絞って、書き方のルール(開始・終了・ステップ、負のインデックス、境界の省略)と、実務で使う具体例をやさしく解説します。
スライスを理解すると、次のようなことが自然にできるようになります。
- 先頭・末尾・任意範囲の部分取得
- 奇数番目や偶数番目の間引き取得、反転や浅いコピー
- 指定範囲の一括置換・削除による柔軟なリスト操作
- 可読性の高いデータ前処理・整形
読み終えた頃には、スライス記法を“見て分かる・すぐ書ける”状態になっているはずです。さっそく基本の書き方から見ていきましょう。
スライスの基本構文と使い方
リストのスライスとは、リストの一部を取り出すために使う操作のことです。リストのインデックス(番号)を指定して、範囲内の要素を取得できます。
スライスを行うためには、リスト名[開始:終了]
という形式で記述します。
開始
: スライスの開始位置を示すインデックス(指定した番号から要素を取り出します)。終了
: スライスの終了位置を示すインデックス(この番号の手前までの要素を取り出します)。
例えば、次のようなリストがあったとします。
fruits = ["apple", "banana", "cherry", "date", "elderberry"]
ここで fruits[1:3]
とすると、インデックス1から3の手前(=2)まで、すなわち2番目と3番目の要素(banana
とcherry
)が取得されます。
実際にリストのスライスを使った例を見てみましょう。
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] subset = numbers[2:5] # インデックス2から4までの要素を取得 print(subset) # 出力: [2, 3, 4]
この例ではnumbers[2:5]
によってリストの2番目から4番目までの要素(2, 3, 4
)が取得されます。
5
の部分は含まれない点に注意しましょう。
また、開始位置や終了位置を省略することもできます。これによりリストの先頭や末尾までを簡単に取得できます。
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # 開始位置を省略したスライス subset_start = numbers[:4] # インデックスの最初から3までを取得 print(subset_start) # 出力: [0, 1, 2, 3] # 終了位置を省略したスライス subset_end = numbers[5:] # インデックス5から最後までを取得 print(subset_end) # 出力: [5, 6, 7, 8, 9]
このように開始や終了を省略することで、リストの特定の範囲を柔軟に操作できます。
スライスの応用|ステップ数を指定しよう
リストのスライスにはもう少し応用的な使い方もあります。
たとえばステップ数を指定することで飛び飛びの要素を取得したり、リストを逆順に取得したりすることができます。
ステップ数を指定するには リスト名[開始:終了:ステップ]
という形式を使います。
# ステップ数を指定したスライス step_slice = numbers[::2] # インデックスの最初から最後までを、1つ飛ばしで取得 print(step_slice) # 出力: [0, 2, 4, 6, 8] # ステップ数をマイナスにしたスライス reverse_slice = numbers[::-1] # インデックスの最初から最後までを、逆順に取得 print(reverse_slice) # 出力: [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
このようにスライスを使うと柔軟にリストの操作が可能です。
[::2]
はリストの全体から1つ飛ばしで要素を取得し、[::-1]
はリスト全体を逆順にしています。
まとめ|範囲抽出・反転・間引き・置換を“スライス”で素早く書こう
本章では、list[start:stop:step]
の基本構文から、開始/終了の省略、負のインデックス、step
の指定までを一通り学びました。
これにより、任意範囲の部分取得・リストの反転・一定間隔の間引き取得・範囲置換や削除といった操作を、冗長なループなしで短く・読みやすく記述できます。
ここまでの内容を活用すれば、前処理やデータ整形のコードがスッキリまとまり、意図が伝わる書き方が自然に選べるはずです。
応用の幅はまだまだ広がります。今日つかんだ“記法の感覚”をそのままに、次のレッスンへ進んで手を動かしていきましょう。
- サイト改善アンケート|ご意見をお聞かせください(1分で終わります)
-
本サイトでは、みなさまの学習をよりサポートできるサービスを目指しております。
そのため、みなさまの「プログラミングを学習する理由」などをアンケート形式でお伺いしています。1分だけ、ご協力いただけますと幸いです。
【Python】サイト改善アンケート
練習問題:リストのスライスを使ってみよう
この記事で学習した「リストのスライス」を復習する練習問題に挑戦しましょう。
問題|データの一部を抽出しよう
リストを使って特定の範囲の要素を取り出すスライス操作を学びましょう。
リスト中の指定された範囲のデータを取得し、それを表示するプログラムを作成してください。
以下の要件に従ってコードを完成させてください。
numbers
という名前のリストに0から9までの数字を格納すること。- リストの2番目から4番目の要素をスライスして取り出し、それを表示すること。
- 最初から4番目までの要素をスライスして取り出し、それを表示すること。
- 5番目から最後までの要素をスライスして取り出し、それを表示すること。
- リスト全体から2つ飛ばしで要素をスライスして取り出し、それを表示すること。
- リストを逆順にスライスして取り出し、それを表示すること。
ただし、以下のような実行結果となるコードを書くこと。
2番目から4番目までの要素: [2, 3, 4] 最初から4番目までの要素: [0, 1, 2, 3] 5番目から最後までの要素: [5, 6, 7, 8, 9] 2つ飛ばしで取得: [0, 2, 4, 6, 8] 逆順に取得: [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
解答例|スライス基礎5パターン
例えば以下のようなプログラムが考えられます。
- 正解コード
-
# 数字のリストを定義 numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # リストの一部をスライスで取り出す subset1 = numbers[2:5] # 2番目から4番目までの要素を取得 print(f"2番目から4番目までの要素: {subset1}") # スライスの応用(開始位置省略) subset2 = numbers[:4] # 最初から4番目までの要素を取得 print(f"最初から4番目までの要素: {subset2}") # スライスの応用(終了位置省略) subset3 = numbers[5:] # 5番目から最後までの要素を取得 print(f"5番目から最後までの要素: {subset3}") # スライスの応用(ステップを指定) subset4 = numbers[::2] # 2つ飛ばしで要素を取得 print(f"2つ飛ばしで取得: {subset4}") # リストを逆順にスライス reverse_list = numbers[::-1] # リストを逆順に取得 print(f"逆順に取得: {reverse_list}")
リストのスライスの疑問解消|FAQと用語のまとめ
初心者がつまずきやすいポイントをFAQとしてまとめ、またよく使う専門用語をわかりやすく整理しました。
理解を深めたいときや、ふと疑問に感じたときに役立ててください。
FAQ|リストのスライスに関するよくある質問
- Q1. スライスの構文における[start:stop:step]の意味は?
-
スライス構文では、開始位置
start
、終了位置stop
、間引き幅step
を指定できます。省略も可能で、柔軟な抽出が可能です。
- Q2. 負のインデックスでスライスできますか?
-
はい、Pythonでは負のインデックスも利用可能です。末尾からの指定ができ、特定の範囲を逆方向から取り出すこともできます。
- Q3. スライスで元のリストは変更されますか?
-
いいえ、スライスは新しいリストを返すため、元のリストは変更されません。ただし、スライス代入を行った場合は元のリストに影響があります。
Python用語集|リストのスライスに関する用語一覧
今回の記事で出てきた用語・関数などを一覧で紹介します。
このサイトに出てくる 全てのPython用語をまとめた用語集 も活用してください。