プログラミングにおけるスライスとは、通常、文字列、タプル、リストから、それぞれ部分文字列、部分タプル、部分リストを取得することを指します。
Pythonはこれら3つだけでなく、あらゆるイテラブルをスライスする簡単な方法を提供しています。
イテラブルとは、その名の通り、反復処理できるオブジェクトのことです。
この記事では、Pythonのリストのスライスについて知っておく必要があるすべてのことを説明します。
Pythonでリストのスライスをする
リストをスライスする方法はいくつかありますが、最も一般的なのは :
演算子を使った次の構文です。
a_list[start:end]
a_list[start:end:step]
パラメータ start
は開始インデックス、 end
は終了インデックス、 step
は「ステップオーバー」されるアイテムの数です。
もし step
が明示的に与えられていない場合、デフォルト値は 1
です。
startというインデックスを持つアイテムは結果として得られるサブリストに含まれますが、
endというインデックスを持つアイテムは含まれないことに注意してください。
リストの最初の要素は0` というインデックスを持ちます。
step` パラメータを指定しない場合の例です。
# A list of strings:
a_list = ['May', 'the', 'Force', 'be', 'with', 'you.']
sublist = a_list[1:3]
print(sublist)
これは印刷されるはずです。
['the', 'Force']
他の単語をスキップするには、 step
を 2
に設定します。
a_list = ['The', 'Force', 'will', 'be', 'with', 'you.', 'Always.']
sublist = a_list[1:8:2]
print(sublist)
出力されます。
['Force', 'be', 'you.']
もし step
がリストされていなければ、サブリストは先頭から始まります。
同様に、もし end
がリストされていなければ、サブリストはオリジナルのリストの終わりで終了します。
a_list = ['Do.', 'Or', 'do', 'not.', 'There', 'is', 'no', 'try.']
sublist = a_list[:4]
print(sublist)
sublist = a_list[4:]
print(sublist)
このコードの断片は次のようにプリントアウトされます。
['Do.', 'Or', 'do', 'not.']
['There', 'is', 'no', 'try.']
リストの先頭と最後尾をスライス記法で見つける
スライス記法はネガティブインデックスでも使うことができます。
ネガティブインデックスは、インデックス -1
を持つ最後の要素からインデックスを開始することを除いて、通常のインデックス付けと同じように動作します。
これは、与えられた長さのリストの先頭と末尾を取得するために使用することができます。
リストの先頭とは、リストの最初の要素 n
を含むサブリストであり、末尾とは、リストの最後の要素 n
を含むサブリストである。
それでは、リストの末尾と先頭を分けてみましょう。
# The length of the tail
n = 2
a_list = ['Never', 'tell', 'me', 'the', 'odds!']
# Head of the list:
sublist = a_list[:n]
print(sublist)
# Tail of the list:
sublist = a_list[-n:]
print(sublist)
これは次のように出力されます。
['Never', 'tell']
['the', 'odds!']
スライス記法によるリストの逆引き
stepパラメータも負にすることができる。
もし、負の値を設定すると、結果のリストはstep` の値で反転されます。
前方に進むのではなく、後方に進み、リストの最後から最初に進み、これらの要素を含むようになります。
a_list = ['Power!', 'Unlimited', 'power!']
sublist = a_list[::-1]
print(sublist)
この結果、次のようになります。
['power!', 'Unlimited', 'Power!']
サブリストの要素をスライス記法で置き換える
スライス記法は、あるサブリストの要素に新しい値を代入するために使うことができます。
例えば、あるリストの末尾と先頭を入れ替えてみましょう。
a_list = ['I', 'am', 'no', 'Jedi.']
print(a_list)
# Replacing the head of a list
a_list[:1] = ['You', 'are']
print(a_list)
# Replacing the tail of a list
a_list[-1:] = ['Sith']
print(a_list)
期待される出力は次のとおりである。
['I', 'am', 'no', 'Jedi.']
['You', 'are', 'no', 'Jedi.']
['You', 'are', 'no', 'Sith']
リストのn番目の要素をスライス記法で置き換える。
リストのn番目の要素ごとに置き換える簡単な方法は、スライス記法で step
パラメータを n
に設定することです。
a_list = ['I’m', 'just', 'a', 'simple', 'man', 'trying', 'to', 'make', 'my', 'way', 'in', 'the', 'universe.']
print(a_list)
# Replacing every other word starting with the word with the index 1
a_list[1::2] = ['only', 'common', 'attempting','do', 'best','the']
print(a_list)
この結果、次のようになります。
['I’m', 'just', 'a', 'simple', 'man', 'trying', 'to', 'make', 'my', 'way', 'in', 'the', 'universe.']
['just', 'simple', 'trying', 'make', 'way', 'the']
['I’m', 'only', 'a', 'common', 'man', 'attempting', 'to', 'do', 'my', 'best', 'in', 'the', 'universe.']
結論
Pythonで任意のシーケンスをスライスするのは簡単で、シンプルで、直感的です。
ネガティブインデックスは、シーケンスの最初または最後のいくつかの要素を取得したり、その順序を逆転させる簡単な方法を提供します。
今回は、Pythonでリストに対してスライス記法を適用する方法について説明しました。