Address
304 North Cardinal St.
Dorchester Center, MA 02124

Work Hours
Monday to Friday: 7AM - 7PM
Weekend: 10AM - 5PM

Pythonのスライス機能の使い方

【Python入門】スライス[x:y:z]の基本とそのステップに関数を使う方法の解説

Pythonのスライス機能[①:②:③]の基本的な使い方と、ステップに関数を使う方法の解説

今回は、Pythonにおける便利機能スライスについての解説です。またスライスにおけるステップの設定に関数が使えることも説明します。

Pythonのスライスとは?

Pythonにおけるスライスとは、シーケンス型のオブジェクト(リストオブジェクト、タプルオブジェクト、文字列オブジェクトなど)で使うことができる機能でそのデータの一部を抜き出したり、並び替えたりできる機能のことです。

よくある基本的な使い方は、次のとおりです。仮にシーケンス型のオブジェクトをsequence_objとします。

sequence_obj[start: stop: step]

これの意味するところは、

・start(スタート地点)とstop(ゴール地点)を指定することでまず範囲を確定(実際には、範囲の最後は「ゴール地点の1つ手前まで」です)
↓
・その確定された範囲内から、指定されたstep(間隔)にしたがってデータを抜き出す

という感じです。

たとえば、次のコードを見てください。

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

print(a[1 : 7: 3]) 

とすると、結果は、

[1, 4]

なります。

この処理を説明しますと、まず第一に今回のリストオブジェクトaの数列について、スライスでは、

  • start(スタート地点)をリストのインデックス番号1
  • stop(ゴール地点)をリストのインデックス番号7

と設定されているため、リストオブジェクトaのインデックス番号1~インデックス番号「6まで」(スライスのゴール地点は、その直前までの情報が範囲として指定されるから)がまず範囲として指定されます。そして今回のリストではインデックス番号と数字の対応は次のようになっています。

print(a[0])  # 結果:0
print(a[1])  # 結果:1
print(a[6])  # 結果:6(stopの1つ手前)
print(a[7])  # 結果:7(これはstopとして設定)

です。

したがって、まずリストのうち、

[1,2,3,4,5,6]

が範囲として設定されます。次に、間隔として「3」が指定されているので、その決定された範囲の中(数列1から6まで)の中から、

  • 最初の数字「1」
  • 次は、「1+3」で「4」
  • その次は、「4+3」で「7」ですが、これは範囲外のため無視されます

以上より、

[1, 4]

となるわけですね。

もう1つの具体例として次も見て下さい。

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

start_index = 1
stop_index = 7

# スライス機能を使った処理
b = a[start_index : stop_index : 1]  

print(b)

結果は、

[1, 2, 3, 4, 5, 6]

となります。

このようなスライス機能は、次のような使い方もあってなかなか便利です。

使い方内容
s[i] = xs の要素 i を x と入れ替えます
s[i:j] = ts の i から j 番目までのスライスをイテラブル t の内容に入れ替えます
del s[i:j]s[i:j] = [] と同じです
s[i:j:k] = ts[i:j:k] の要素を t の要素と入れ替えます
del s[i:j:k]リストから s[i:j:k] の要素を削除します

スライスのステップに関数を使う方法

さてこの便利なスライスですが、実は「step(間隔)」の項目に関数も指定できます。Python公式ドキュメントでは、step(間隔)のところには「expression(式)」を使えると定義されています。

そしてPythonにおけるexpression(式)とは、

expression
(式) 何かの値と評価される、一まとまりの構文 (a piece of syntax) です。言い換えると、式とはリテラル、名前、属性アクセス、演算子や関数呼び出しなど、値を返す式の要素の積み重ねです。他の多くの言語と違い、Python では言語の全ての構成要素が式というわけではありません。 while のように、式としては使えない 文 もあります。代入も式ではなく文です。

※太文字は1978worksによるもの

Python公式ドキュメント用語集:expression

つまり、式とはなんらかの値が返ってくるものです。

そして関数も、それが実行されるとなんらかの値が返ってきますのでexpression(式)の1つです。したがって、

スライスのstepはexpression
↓
expressionには関数も含まれる
↓
stepに関数を設定できる。

という感じです。

それでは実際に関数をstepに設定して使ってみましょう。次のコードを見てください。fnc_stepという関数を使った例です。

def fnc_step(var1, var2 ):
    step_num = var1*var2
    return step_num


a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
start_index = 1
stop_index = 7
b = a[start_index: stop_index: fnc_step(2, 1)]
print(b)

結果は、

[1, 3, 5]

となります。stepで関数fnc_step(2, 1)を呼び出すことで、step_numとして「2×1=2」が設定されています。

このようなスライスの基本をふくめ、動画学習サイトUdemyでは下のようにいろいろなPythonの基本を解説してくれる動画講座があります。ぜひ利用してみてください。