【Python】レッスン4-05:リストのスライスを理解しよう

記事内に商品プロモーションを含む場合があります

この記事で学べる知識:リストのスライス

この記事の練習問題で使用する知識:
レッスン1~3の知識リストの定義と要素追加リストの要素削除リストの情報出力リストの集計・並べ替えリストのスライスリストのループ処理リストの内包表記タプルの定義と基本操作タプルのアンパックとネスト辞書の定義と基本操作辞書のループ処理辞書の内包表記集合の定義と基本操作

<<前の問題 問題集Top 次の問題>>

Pythonの「リストのスライス」とは

この章ではPythonにおける「リストのスライス」の意味や使い方を学習します。必要ない方はここをクリックして練習問題へ飛びましょう。




Pythonではリストは非常に便利なデータ構造の一つです。

その中でも「スライス」と呼ばれる機能は、リストの一部を簡単に取り出すための重要な技術です。

スライスを使えば複雑な操作を行うことなく、必要な部分だけを抽出できます。

リストのスライスとは?

リストのスライスとは、リストの一部を取り出すために使う操作のことです。リストのインデックス(番号)を指定して、範囲内の要素を取得できます。

スライスを行うためには、リスト名[開始:終了]という形式で記述します。

  • 開始: スライスの開始位置を示すインデックス(指定した番号から要素を取り出します)。
  • 終了: スライスの終了位置を示すインデックス(この番号の手前までの要素を取り出します)。

例えば、次のようなリストがあったとします。

fruits = ["apple", "banana", "cherry", "date", "elderberry"]

ここでfruits[1:3]とするとリストの2番目から3番目の要素まで(インデックス1と2、すなわちbananacherry)が取得されます。

リストのスライスの使用例

実際にリストのスライスを使った例を見てみましょう。

# リストを定義
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# 2番目から5番目までの要素を取得(5番目の要素は含まれない)
subset = numbers[2:5]
print(subset)  # 出力: [2, 3, 4]

この例ではnumbers[2:5]によってリストの2番目から4番目までの要素(2, 3, 4)が取得されます。

5の部分は含まれない点に注意しましょう。

また、開始位置や終了位置を省略することもできます。これによりリストの先頭や末尾までを簡単に取得できます。

# 最初から4番目までの要素を取得
subset_start = numbers[:4]
print(subset_start)  # 出力: [0, 1, 2, 3]

# 5番目から最後までの要素を取得
subset_end = numbers[5:]
print(subset_end)  # 出力: [5, 6, 7, 8, 9]

このように開始や終了を省略することで、リストの特定の範囲を柔軟に操作できます。

スライスの応用

リストのスライスにはもう少し応用的な使い方もあります。

たとえばステップ数を指定することで飛び飛びの要素を取得したり、リストを逆順に取得したりすることができます。

ステップ数を指定するにはリスト名[開始:終了:ステップ]という形式を使います。

# リストを2つ飛ばしで取得
step_slice = numbers[::2]
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]はリストの全体から2つ飛ばしで要素を取得し、[::-1]はリスト全体を逆順にしています。

まとめ

リストのスライスはPythonのリストを効率的に操作するための強力な機能です。

[開始:終了]の形式で指定するだけで、簡単にリストの一部を取り出すことができます。また、ステップ数を指定することで、さらに高度な操作も可能です。

リストを自由に操作できるようになるとデータ処理が一層便利になりますので、ぜひ積極的に使ってみてください。

練習問題4-5:リストのスライスを使って一部のデータを抽出しよう

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]

この問題を解くヒント

1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。

ヒント1【コードの構成を見る】

正解のコードは上から順に以下のような構成となっています。
(※下記の□はコード内のインデントを表しています)

1:リストnumbersの定義
2:スライスを使い、numbersの2番目から4番目までの要素を変数subset1に代入
  □変数subset1の内容を出力
3:スライスの開始位置を省略し、numbersの最初から4番目までの要素を変数subset2に代入
  □変数subset2の内容を出力
4:スライスの終了位置を省略し、numbersの5番目から最後までの要素を変数subset3に代入
  □変数subset3の内容を出力
5:ステップ数を指定して、numbersの要素を2つ飛ばしでスライスし、変数subset4に代入
  □変数subset4の内容を出力
6:スライスを逆順に行い、numbersの逆順リストを変数reverse_listに代入
  □変数reverse_listの内容を出力

ヒント2【穴埋め問題にする】

以下のコードをコピーし、コメントに従ってコードを完成させて下さい。

# リストのスライスを学習するためのプログラム

# 数字のリストを定義
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

"""【穴埋め問題1】
ここにリストの一部をスライスして取得するコードを書いてください。
例: numbers[2:5]で2番目から4番目までの要素を取得します。
"""

"""【穴埋め問題2】
スライスの開始位置を省略し、リストの最初から4番目までの要素をスライスして取得してください。
"""

"""【穴埋め問題3】
スライスの終了位置を省略し、リストの5番目から最後までの要素を取得するコードを書いてください。
"""

"""【穴埋め問題4】
スライスのステップを指定して、リスト全体から2つ飛ばしで要素を取得するコードを書いてください。
"""

"""【穴埋め問題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}")

正解コードの解説

Pythonではリストのスライスを使うことでリスト内の特定の範囲を簡単に取り出すことができます。

このコードはリストのスライスを学習するためのシンプルな例です。

リストの定義

numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

ここでは0から9までの整数を格納したリストnumbersを定義しています。リストは[]で囲まれた要素の集まりで、Pythonでよく使われるデータ構造です。

リストの一部をスライスで取得

subset1 = numbers[2:5]
print(f"2番目から4番目までの要素: {subset1}")

この部分ではnumbers[2:5]を使ってリストの2番目から4番目までの要素を取り出しています。

スライスの範囲は「開始:終了」と指定し、終了位置は含まれない点に注意してください。例えば、ここでは[2, 3, 4]という結果が得られます。

開始位置を省略したスライス

subset2 = numbers[:4]
print(f"最初から4番目までの要素: {subset2}")

この例では開始位置を省略して、最初から4番目までの要素を取り出しています。

開始位置を省略するとリストの最初から指定した位置までの要素が取得されます。この場合、結果は[0, 1, 2, 3]です。

終了位置を省略したスライス

subset3 = numbers[5:]
print(f"5番目から最後までの要素: {subset3}")

終了位置を省略することでリストの5番目から最後までの要素を取得できます。ここでは、[5, 6, 7, 8, 9]という結果になります。

ステップを指定したスライス

subset4 = numbers[::2]
print(f"2つ飛ばしで取得: {subset4}")

スライスのステップ数を指定することで飛び飛びに要素を取得することができます。

[::2]は2つ飛ばしで要素を取り出し、結果として[0, 2, 4, 6, 8]が得られます。

リストを逆順に取得

reverse_list = numbers[::-1]
print(f"逆順に取得: {reverse_list}")

ステップを負の値にするとリストを逆順に取得できます。

[::-1]はリスト全体を逆順にし、[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]という結果が表示されます。

まとめ

このコードではリストのスライス操作の基本を学びました。

スライスはリストから特定の範囲や順序でデータを簡単に取り出すことができ、データ処理において非常に便利です。

スライスの基本を理解することでリスト操作の効率が向上し、より複雑なプログラムを作成できるようになります。

<<前の問題 問題集Top 次の問題>>

この記事への質問・コメント

この記事を作成するにあたりAIを活用しています。

問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。






    Python記事トップへ戻る
    トップページへ戻る