このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

【Python入門】slice関数

slice関数

 slice関数は、リストや文字列などのシーケンスに対して特定の範囲を抽出する際に用いるスライス操作の範囲を表すオブジェクトを生成します。sliceオブジェクトは、開始位置、終了位置、ステップ(間隔)という3つの属性を保持し、シーケンスの切り出し処理を柔軟に行うための情報をまとめています。これらのオブジェクトは、通常は直接使う機会が少ないものの、一部のライブラリや高度なシーケンス操作の際に利用される重要な要素です。

プログラムのダウンロード

 「ダウンロード」から、JupyterLab で実行できるサンプルプログラムがダウンロードできます。ファイルは、ESET Endpoint Securityでウイルスチェックをしておりますが、ダウンロードとプログラムの実行は自己責任でお願いいたします。

1.slice関数の基本

1.1. 基本構文と動作

slice関数は、以下のような構文で呼び出され、sliceオブジェクトを生成します。

slice(stop)
slice(start, stop, step)

 この構文では、stopのみを指定すると、開始値はNone、ステップもNoneとなり、stopの位置までのスライス範囲を表します。
例えば、以下のコードはstopに10を指定してsliceオブジェクトを生成し、その属性を表示します。

# slice関数を使ってsliceオブジェクトを生成
s = slice(10)
# 各属性の表示
print("start:", s.start)  # 出力: None
print("stop:", s.stop)    # 出力: 10
print("step:", s.step)    # 出力: None

実行結果

start: None
stop: 10
step: None

解説

 slice(10) とすると、開始値は指定されていないためNone、終了値が10、ステップも指定されていないのでNoneとなります。

1.2. 3つの属性を指定する方法

 開始値、終了値、ステップの3つの値を指定してsliceオブジェクトを生成することもできます。例えば、開始値に10、終了値に20、ステップに3を指定する場合、以下のように書きます。

# 開始値、終了値、ステップを指定してsliceオブジェクトを生成
s = slice(10, 20, 3)
# 各属性の表示
print("start:", s.start)  # 出力: 10
print("stop:", s.stop)    # 出力: 20
print("step:", s.step)    # 出力: 3

実行結果

start: 10
stop: 20
step: 3

解説

 この場合、s.startには10、s.stopには20、s.stepには3が格納され、これによりシーケンスの10番目から20番目までを3つおきに取り出す範囲を示すことができます。

2.応用と利用例

2.1. シーケンスのスライス操作への応用

 sliceオブジェクトは、リストや文字列のスライス操作に直接利用できます。例えば、以下の例はリストの特定の範囲をsliceオブジェクトで抽出する方法を示しています。

data = [i for i in range(30)]  # 0から29までのリストを作成
s = slice(5, 15, 2)           # 5から15(インデックスでは14)までを2つおきに取り出す範囲
sliced_data = data[s]
print("Original list:", data)
print("Sliced list:", sliced_data)

実行結果

Original list: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29]
Sliced list: [5, 7, 9, 11, 13]

解説

  • リストdataは0から29までの整数を含んでいます。
  • slice(5, 15, 2) により、開始位置5、終了位置15(インデックスでは14)、ステップ2でスライスを指定します。
  • data[s] で、指定された範囲の要素が抽出され、出力例は [5, 7, 9, 11, 13] となります。

2.2. 応用例:文字列の一部抽出

同様に、文字列に対してもsliceオブジェクトを使って一部分を抽出することが可能です。

text = "DataScience"
s = slice(4, 11)  # 文字列のインデックス4から10までを抽出
sliced_text = text[s]
print("Original text:", text)
print("Sliced text:", sliced_text)

実行結果

Original text: DataScience
Sliced text: Science

解説

  • 文字列 "DataScience" に対して、slice(4, 11) でインデックス4から10の範囲を抽出します。
  • 結果として、"Science" の部分が切り出され、出力されます。

まとめ

slice関数は、スライス操作の範囲を表すオブジェクトを生成するための便利な機能です。

  • 基本構文は、slice(stop) または slice(start, stop, step) であり、指定しない属性はNoneとなります。
  • 生成したsliceオブジェクトは、リストや文字列などのシーケンスに対して、範囲を指定して要素を抽出する際に利用できます。

 これらのテクニックを活用することで、シーケンス操作をより柔軟かつ効率的に実装することが可能になります。