こんにちは。今回はPythonについての記事です。
今回学習した内容は、文字列から一部分を取り出すときの記述の仕方です。
この記事では年月日8桁が文字列として与えらているときに、年、月、日を取り出すということをしました。
指定の位置の一文字取り出す
文字列の中から指定の位置の一文字を取り出したい場合、鍵括弧を使って次のように記述できます。
1文字取り出す例1
date_str = '19870425'
print(date_str[0])
print(date_str[1])
print(date_str[2])
print(date_str[3])
print(date_str[4])
print(date_str[5])
print(date_str[6])
print(date_str[7])
print("---------------")
print(date_str[-1])
print(date_str[-2])
結果
1
9
8
7
0
4
2
5
---------------
5
2
上記サンプルのように、変数名[インデックス]という書き方で、文字列から一文字取り出すことができます。インデックスは文字列の先頭の一文字が0に対応します。
上記サンプルでは先頭から一文字ずつ取り出して、出力しています。なお、インデックスには負の数を使うことができます。末尾の位置から-1, -2,…です。なので、変数[-1]という書き方で、文字列の最後の文字を取り出せます。変数[-2]で、最後から2番目の位置の文字を取り出せます。
インデックスには以下のように、変数を使うことができます。
1文字取り出す例2
date_str = '19870425'
index = 3
print(date_str[index])
結果
7
注意としては、文字列の長さに対して、インデックスが範囲を超えてしまうとエラーになる点です。例えば、上記サンプルでは変数date_strに格納されたは文字列は8文字です。そのためインデックスの0以上の値の範囲は0~7です。例えば、index = 8
と記述すると、次のエラーが発生します。
IndexError: string index out of range
また、インデックスの負の数の範囲は-1から-8までです。index = -9
と記述すると上記エラーが発生します。
まとめると、上記サンプルでのインデックスの範囲は以下の通りです。
- 0以上の範囲は0から「[文字列の長さ] – 1」まで。
- 負の数は-1から「-[文字列の長さ]」まで。
体験談としては、繰り返し処理などで変数を使った場合、上記エラーが発生しやすいです。インデックスの値の範囲に注意が必要です。
年月日8桁の年、月、日の部分をそれぞれ取り出す
インデックスの範囲を指定する記述の仕方があり、これを使うと文字列の一部分を取り出すことができます。
例えば、年月日8桁で構成される文字列「19870425」の年、月、日を取り出すには以下のように記述します。
一部分を取り出す例
date_str = '19870425'
print('----------------')
print('(1-1)最初から2番目まで取り出す書き方1')
print(date_str[0:2])
print('(1-2)最初から2番目まで取り出す書き方1')
print(date_str[:2])
print('----------------')
print('(2)途中の一部分を取り出す書き方')
print(date_str[4:6])
print('----------------')
print('(3-1)途中から最後まで取り出す書き方1')
print(date_str[6:8])
print('(3-2)途中から最後まで取り出す書き方2')
print(date_str[6:])
結果
----------------
(1-1)最初から2番目まで取り出す書き方1
19
(1-2)最初から2番目まで取り出す書き方1
19
----------------
(2)途中の一部分を取り出す書き方
04
----------------
(3-1)途中から最後まで取り出す書き方1
25
(3-2)途中から最後まで取り出す書き方2
25
上記サンプルの(1-1)と(1-2)では年の部分を、(2)では月の部分を、(3-1)と(3-2)では日の部分を取り出しています。
このサンプルのように、文字列の一部分を取り出すには「変数[a:b]」という記述をします。この処理をスライスと言います。[a:b]が表すインデックスの範囲はaからb-1です。
(1-1)では[0:2]という指定をしています。この指定で、インデックスの範囲は0から1となります。スライスの指定ではインデックス0は省略できます。そのため、[0:2]は[:2]と記述できます。そのため、(1-1)と(1-2)は同じ結果になります。
(2)では月の部分を取り出しています。[4:6]と記述しているので、インデックスの範囲は4、5です。
(3-1)では日の部分を取り出しています。ここでは、[a:b]のbに最後のインデックスを指定しています。スライスの指定では最後のインデックスは省略することができ、[a:]という記述ができます。そのため、(3-1)と(3-2)では同じ結果になります。
このように、「変数[a:b]」という指定で、文字列の一部分を取り出すことができます。
なお、スライスの指定でも負の数のインデックスを使うことができます。以下では、年と日の部分を負の数で取り出しています。
スライスで負のインデックスを使った例
date_str = '19870425'
print('----------------')
print(date_str[:2])
print(date_str[:-6])
print('----------------')
print(date_str[6:])
print(date_str[-2:])
結果
----------------
19
19
----------------
25
25
[:-6]という指定ではインデックスは0から-7です。今回は8桁の文字列なので、インデックス「-7」はインデックス「1」と同じ位置を示します。そのため、先頭の2桁が取り出されます。
[-2:]という指定ではインデックスは-2から最後までです。今回は8桁の文字列なので、インデックス「-2」はインデックス「6」と同じ位置を示します。そのため、最後の2桁が取り出されます。
以上、参考になれば幸いです。