Pythonで配列の一部を取り出す「スライス」の方法
Pythonで配列の一部を色々な形で抽出する方法、通称「スライス」のまとめです。
「数値配列の一部分のみの合計値を求めたい」ですとか、「文字列の一部分のみ抽出したい」なんていう時にスライスの記法を知っておくと、簡素かつスマートにソースを書くことができます。
ここでは、一例として、10文字の文字列「ABCDEFGHIJ」を様々な形で部分抽出し、xという変数に格納してみます。
1.n文字目からm文字目を取り出す
試しに、3文字目から5文字目を取り出してみます。
1 2 |
x = text[2:5] print(x) |
↓
1 |
CDE |
text[a:b]という書き方は、”a文字目の次からb文字目までを抽出する”という意味になります。
2.頭からn文字を取り出す
頭の3文字を取り出してみます。
1 2 |
x = text[:3] print(x) |
↓
1 |
ABC |
先ほどのtext[a:b]のaを省略すると、自動的に「0」が入っているものと見なされます。
よって、text[:3]と書けば「0文字目の次から3文字目までを取り出す」という意味になります。
この書き方は、ファイル名の先頭n文字だけ欲しい時などによく使います。
3.n文字以降を取り出す
逆に、頭の3文字を削って、4文字目より後を取り出してみます。
1 2 |
x = text[3:] print(x) |
↓
1 |
DEFGHIJ |
逆にtext[a:b]のbを省略すると、自動的にtextの文字列長が入っているものと見なされます(この場合は10文字なのでb=10)。
よって、text[:b]と書けば「3文字目の次から10文字目までを取り出す」という意味になります。
4.お尻からn文字を取り出す
次はお尻の方から3文字取り出してみます。
1 2 |
x = text[-3:] print(x) |
↓
1 |
HIJ |
text[-a:b]と、aにマイナスを付けると、「textの文字列長-a」と見なされます(この場合は10-3=7)。
よって、text[-3:]と書けば「7文字目の次から10文字目までを取り出す」という意味になります。
ファイル名の拡張子を取得したりする時に便利そうです。
5.配列の偶数番目だけ取り出す
次は少し特殊です。まずは偶数番目だけを取り出してみます。
1 2 |
x = text[::2] print(x) |
↓
1 |
BDFHJ |
text[a:b:c]という表記があります。
a,bは今までと同様ですが、こう書くと「a文字目の次からb文字目まで、c文字ごとに取り出す」という意味になります。
そのa,bが省略されている格好ですので、「0文字目の次から、10文字(文字列長)目まで、2文字ごとに取り出す」と解釈され、つまり「偶数番目のみ取り出す」、ということになります。
6.配列の奇数番目だけ取り出す
1 2 |
x = text[1::2] print(x) |
↓
1 |
ACEGI |
上記と同様に、こう書けば「0文字目の次から、10文字(文字列長)目まで、2文字ごとに取り出す」と解釈され、これはつまり「奇数番目のみ取り出す」と同義です。
cの部分を変えれば、2つ置き、3つ置き・・・も簡単に書けることになります。
もう1つ、知っておくと役に立ちそうな記法があるのでお伝えします。
7.配列を逆から取り出す
1 2 |
x = text[::-1] print(x) |
↓
1 |
JIHGFEDCBA |
cの部分にマイナスを入れると、お尻から取り出してくれます。
お尻から2つ置きに取得したいのなら、cに-2を入れれば良いわけです。
以上、覚えておいて損のない、Pythonのスライスでした。