Python でリストをスライスする方法 (インデックス、ステップ、反転)

強力な括弧構文を使用して Python でリストをスライスする方法を学びます。開始、停止、およびステップ引数、負のインデックス付け、リストの反転をマスターします。

エディターでこのソリューションを試してください

概要

スライスは Python の最も直感的で強力な機能の 1 つで、リスト、タプル、または文字列のサブセットをクリーンで簡潔な構文で抽出できます。リストから特定の要素をコピーするための詳細なループを作成する代わりに、Python のスライス表記を使用すると、角括弧内にインデックスの範囲を指定できます。

リスト スライスの完全な構文は `my_list[start:stop:step]` です。 「start」インデックスは包括的で、「stop」インデックスは排他的で、「step」は要素間の増分を定義します(デフォルトは 1)。 「start」を省略した場合、Python はデフォルトでリストの先頭を設定します。 「stop」を省略した場合、Python はデフォルトでリストの最後に移動します。これにより、コレクションの一部の抽出が非常に表現力豊かになります。

スライスは負のインデックスもサポートしているため、非常に多用途です。負の開始インデックスまたは終了インデックスは、リストの末尾から逆方向にカウントします (`-1` は最後の項目を表します)。 `my_list[::-1]` などの負のステップ値を設定すると、リストの逆コピーをすばやく取得できます。クリーンなデータ抽出には、スライス範囲を理解することが不可欠です。

コードと実行の出力

このスクリプトは、さまざまな開始、停止、ステップ範囲、負のインデックス付け、およびリストの反転を使用したリストのスライスを示します。

numbers = [0, 10, 20, 30, 40, 50, 60, 70, 80]

# 1. Basic slicing: elements from index 2 up to (but excluding) 6
subset = numbers[2:6]
print("Subset [2:6]:", subset)

# 2. Omitting indices: start to index 4, and index 5 to end
first_five = numbers[:5]
last_four = numbers[5:]
print("First five [:5]:", first_five)
print("Last four [5:]:", last_four)

# 3. Using a step parameter: get every second element
every_second = numbers[::2]
print("Every second [::2]:", every_second)

# 4. Negative indexing: get the last three elements
last_three = numbers[-3:]
print("Last three [-3:]:", last_three)

# 5. Reverse the list using step=-1
reversed_numbers = numbers[::-1]
print("Reversed list [::-1]:", reversed_numbers)
端子出力
Subset [2:6]: [20, 30, 40, 50]
First five [:5]: [0, 10, 20, 30, 40]
Last four [5:]: [50, 60, 70, 80]
Every second [::2]: [0, 20, 40, 60, 80]
Last three [-3:]: [60, 70, 80]
Reversed list [::-1]: [80, 70, 60, 50, 40, 30, 20, 10, 0]

段階的な実装

  • list[start:stop] を使用して、インデックス start から stop まで (stop は含まない) の要素を抽出します。
  • リストの境界からスライスするには、開始インデックスまたは終了インデックス (list[:4] または list[4:] など) を省略します。
  • 要素を一定の間隔でスキップするには、括弧 list[::step] 内に 3 番目の引数を渡します。
  • コレクションの最後から要素を逆方向にカウントするには、負のインデックスを使用します。

よくある質問

スライスすると元のリストが変更されますか?

いいえ、リストのスライスでは、要求された範囲の浅いコピーが返され、元のリストは完全に変更されません。

スライス インデックスが範囲外の場合はどうなりますか?

IndexError が発生する単一のインデックスへのアクセスとは異なり、スライスは寛容であり、単純にリストの境界で範囲をキャップし、範囲内に要素が含まれない場合は空のリストを返します。

関連トピック

推奨される Python リソース

関連するインタラクティブなチュートリアル、チートシート、コード比較で知識を深めてください。