どうも!リョクちゃです。
リストについては何回か紹介をしてきましたが、
理解をより深めるためにリストについて細かく要素を絞って紹介していこうと思います。
そのような中で、今回はリストのインデックスについて
新たにスライス記法について触れながら紹介していきます。
ちなみに前回はこちら
目次
リストのインデックス
Pythonでは、リストのインデックスは0から始まると以前に触れました。
図で表すと下のようになります。
0番目には文字列’Apple’が格納されています。
1番目には数値123が格納されています。
それぞれ、
2番目には文字列’Bacon’、3番目には文字列’Egg’が格納されています。
これをコードで表すと、
1 2 3 4 5 |
x = ['Apple', 123, 'Bacon', 'Egg'] print(x[2]) # 出力 # Bacon |
x[2]と書くことで、リスト変数xの2番目の要素を取り出して出力しています。
x[2]のようにリストのインデックスが1つだけの操作の場合、
インデックスはリスト中の特定の要素を参照するものだと、
考えておけばだいたい何とかなります。
リストのインデックスの位置について
リストの操作がより高度なものになってくると、
リストのインデックスの考え方は今までとは変わってきます。
この場合、インデックスが示す位置は要素と要素の間を示すものだと
考えるほうが正しくなります。
このように要素に対してインデックスを定めるのではなく、
要素と要素の間にインデックスがあると定める。
これは新たな考え方になります。
実際にこれを定めた場合に操作する方法がスライス記法と呼ばれるものになります。
スライス記法……
表記の仕方
リスト変数[index1 : index2] → index1 ~ index2の範囲の全ての要素を取り出す。
スライス記法(またはスライス操作とも呼ばれる。)とは、
上記のように:(コロン)を使って表すことができます。
他の変数に対しても使うことができ、一般的に、
変数[開始位置:終了位置]と表すことができます。
ちなみに開始位置もしくは終了位置についてはどちらか一方は省略ができます。
実際に書いてみる
実際に書いてどんなものなのか見ていきましょう。
先ほどの図をもとに、0番目から2番目の要素を取り出したい場合、
以下のコードになります。
1 2 3 4 5 |
x = ['Apple', 123, 'Bacon', 'Egg'] print(x[0:2]) # 出力 # ['Apple', 123] |
スライス記法では、0番目から2番目を指定した場合、
取り出せるのは’Apple’と123になります。
※ ’Bacon’は取り出せません。これは前述で話したインデックスの考え方が異なるからです。
‘Bacon’を取り出したい場合は、x[0:3]と記述することで、取り出せるようになります。
2つ目のインデックスが1つ目のインデックスよりも前の場合
このようなときはどうなるでしょう?
コードで書くと下のようになります。
1 2 |
x = ['Apple', 123, 'Bacon', 'Egg'] print(x[-1:2]) |
実行してみると、
[]と出力がされました。
この場合は、空のリストで返されます。
スライス記法での省略
開始位置を省略した場合、
1 2 3 4 5 |
x = ['Apple', 123, 'Bacon', 'Egg'] print(x[:3]) # 出力 # ['Apple', 123, 'Bacon'] |
リスト変数xの先頭から3番目までを取り出しています。
終了位置を省略した場合、
1 2 3 4 5 |
x = ['Apple', 123, 'Bacon', 'Egg'] print(x[2:]) # 出力 # ['Bacon', 'Egg'] |
リスト変数xの2番目から最後までを取り出しています。
省略した場合はそれぞれこのように書くことができます。
その他スライス記法のいろいろ
・全体から要素をi個ずつ取り出す
変数[::i]
1 2 3 4 5 |
x = ['Apple', 123, 'Bacon', 'Egg'] print(x[::1]) # 出力 # ['Apple', 123, 'Bacon', 'Egg'] |
ここではリスト変数xから1個ずつ要素を取り出して出力しています。
・逆順に取り出す
変数[::-i]
1 2 3 4 5 |
x = ['Apple', 123, 'Bacon', 'Egg'] print(x[::-1]) # 出力 # ['Egg', 'Bacon', 123, 'Apple'] |
ここではリスト変数xから1個ずつ要素を逆から取り出しています。
・始点からi-1番目の要素をj個ずつ取り出す
変数[:i:j]
1 2 3 4 5 |
x = ['Apple', 123, 'Bacon', 'Egg'] print(x[:1:1]) # 出力 # ['Apple'] |
ここではリスト変数xの開始点から1-1番目(0)の要素を1個ずつ取り出しています。
・i番目から終点までの要素をj個ごとに取り出す。
変数[i::j]
1 2 3 4 5 |
x = ['Apple', 123, 'Bacon', 'Egg'] print(x[1::1]) # 出力 # [123, 'Bacon', 'Egg'] |
ここではリスト変数xの1番目から終点までの要素を1個ごと取り出しています。
そのため、’Apple’は取り出せません。
まとめ
リストのインデックスの考え方は2通り紹介しました。
シンプルな操作の場合とより複雑な操作の場合、
これらでリストのインデックスの位置の考え方が変わってくるので気を付けてください。
スライス記法を用いて要素を取り出す場合は、インデックスの位置や戻り値の型に注意。
慣れてくるとスライス記法は便利な書き方かと思います。
・こちらの書籍を参考にPythonの理解を深めました。