Pythonの型とオブジェクト
Pythonではいろいろなデータやプログラムのことを オブジェクト と呼びます。オブジェクト(Object)は、英語で「物」とか「対象」という意味です。
そして、そのオブジェクトの種類のことを型と呼びます。オブジェクトの種類ですので、数値の1というデータがあれば、それは「整数型のオブジェクト」と呼ばれ、数値の1の型は「整数型」となります。
また、文字の”1″というデータがあれば、「文字列型のオブジェクト」で、文字の”1″の型は「文字列型」となります。
オブジェクトは、データだけではなく関数も「関数型のオブジェクト」、モジュールは「モジュール型のオブジェクト」という扱いになります。
モジュールは、import 文などでロードした モジュール のことで
import os
でインポートした’os’は、モジュール型の’os’オブジェクトとなります。
ただ、演算子や命令などはオブジェクトではありません。
リスト
Pythonには、複数のオブジェクトをひとまとめにして扱うものとして「リスト」があります。
リストに入れられたオブジェクトは「要素」と呼ばれ、'[‘と’]’で作成し、要素の区切りは’,'(カンマ)を用います。
[要素1,要素2,要素3, ...]
要素が1つも登録されていない空のリストを作成することもできます。
list_test = []
リストオブジェクトの要素は、”リストオブジェクト[要素の順番]”で参照することができます。
この要素の順番は「インデックス(添え字)」と呼ばれ、先頭から0で始まりリストオブジェクトの最後のインデックスは、”リストオブジェクトの要素数 – 1″となります。
test_list = ["東京","品川","新横浜","名古屋","京都","新大阪"] print(test_list[0]) # "東京"が表示されます print(test_list[1]) # "品川"が表示されます print(test_list[5]) # "新大阪"が表示されます
リストの操作
リストオブジェクトは作成後に操作することができます。
要素の挿入
リストオブジェクトに要素を追加するときは、リストのinsert()メソッドを使います。
insert()メソッドは挿入する位置と挿入するオブジェクトを指定します。
リストオブジェクトの末尾以外に要素を追加すると、追加した要素以降の要素のインデックスはすべて1つずつ後ろへずれます。
test_list = ["東京","品川","新横浜","名古屋","京都","新大阪"] print("追加前:", test_list) test_list.insert(3,"浜松") # 新横浜と名古屋の間に浜松を追加します print("追加後:", test_list)
上記のコードを実行すると下記のように出力されます
追加前: [‘東京’, ‘品川’, ‘新横浜’, ‘名古屋’, ‘京都’, ‘新大阪’]
追加後: [‘東京’, ‘品川’, ‘新横浜’, ‘浜松’, ‘名古屋’, ‘京都’, ‘新大阪’]
要素の置換(置き換え)
置換というと大げさに聞こえますが、実際には要素の値を書き換えることになります。
こちらは、要素に対して代入式を書けば置き換えられます。
ただ、「置き換え」なので指定するリストのインデックスがそのリストオブジェクトで指定できる範囲外の場合はエラーとなってしまいます。
test_list = ["東京","品川","新横浜","浜松","名古屋","京都","新大阪"] print("置換前:", test_list) test_list[3] = "静岡" # 浜松を静岡に変更します print("置換後:", test_list)
このコードを実行すると下記のように出力されます。
置換前: [‘東京’, ‘品川’, ‘新横浜’, ‘浜松’, ‘名古屋’, ‘京都’, ‘新大阪’]
置換後: [‘東京’, ‘品川’, ‘新横浜’, ‘静岡‘, ‘名古屋’, ‘京都’, ‘新大阪’]
要素の削除
要素の削除は、del 文を使います。
削除を行うと、その要素があったインデックスには1つ後ろにあった要素となり、以降すべての要素のインデックスが1つずつ前にずれます。
こちらも、要素の置換と同じでdel 文で削除するときに指定するリストのインデックスがそのリストオブジェクトで指定できる範囲外の場合はエラーとなってしまいます。
test_list = ["東京","品川","新横浜","浜松","名古屋","京都","新大阪"] print("削除前:", test_list) del test_list[3] # 新横浜と名古屋の間にある浜松を削除します print("削除後:", test_list)
このコードを実行すると、下記のように出力されます。
削除前: [‘東京’, ‘品川’, ‘新横浜’, ‘浜松’, ‘名古屋’, ‘京都’, ‘新大阪’]
削除後: [‘東京’, ‘品川’, ‘新横浜’, ‘名古屋’, ‘京都’, ‘新大阪’]
while文を使ったリストのループ処理
リストオブジェクトは複数のオブジェクトをひとまとめにして持っているのですが、プログラムではだいたいこのリストオブジェクトの要素を順にすべて参照したりします。
while 文を用いて、インデックスがリストオブジェクトの最後のインデックスを超えるまでのループを作成し、そのループ処理の中でこのインデックス値をつかってリストの要素にアクセスします。
test_results = [100, 90, 40, 75, 30, 95] index = 0 # インデックス値(初期値:0) total = 0 # 合計値(初期値:0) while index < 6: result = test_results[index] total = total + result # 合計値に結果値を加算 index = index + 1 # indexを一つ進める print("結果の合計値:", total)
len() 関数
リストオブジェクトの要素数ですが、プログラムでこのリストオブジェクトの要素数が変わるたびに毎回プログラムに書いていると大変です。
リストは操作で要素を挿入したり削除したりもできるので、常に一定というわけでもありません。
そういうときのために、要素数を返してくれる len() 関数という関数があります。
この関数を使うと、プログラムで処理を実行するときにそのリストオブジェクトの要素数がいくつかを返してくれるので
リストオブジェクトの要素数が変わってもリストオブジェクトの数を取り扱う部分でプログラムを書き換える必要がなくなります
test_results = [100, 90, 40, 75, 30, 95] index = 0 # インデックス値(初期値:0) total = 0 # 合計値(初期値:0) test_results_len = len(test_results) # test_resultsの要素の数を取得する while index < test_results_len: result = test_results[index] total = total + result # 合計値に結果値を加算 index = index + 1 # indexを一つ進める print("結果の合計値:", total)
こうすると、リスト test_results の要素数が変化しても合計値を算出する処理は変更を行う必要がなくなります。
for文によるループ
while 文を使ったリストのループ処理で、リストの要素にアクセスする処理を書いてみましたが
while 文の場合は、
- インデックス変数が必要になる
- ループ脱出の条件でリストの要素数を知っておく必要がある
のですが、リストオブジェクトにアクセスするときに毎回同じ処理を用意するのは大変です。
(while 文でインデックス変数を使った処理が要らないわけではありません。インデックス変数があるおかげでインデックス変数に基づいた処理などを記述することができます)
test_results = [100, 90, 40, 75, 30, 95] total = 0 # 合計値(初期値:0) for result in test_results: total = total + result # 合計値に結果値を加算 print("結果の合計値:", total)
for 文を使ってループ処理を使うと、この「インデックス変数」と「リストの要素数」を意識しないでリストオブジェクトの要素にアクセスできます。
for 文を使ったループの場合、ループ処理中で使用するリストオブジェクトの要素をあらかじめ1つの変数に代入しておいてくれます。
ですので、ループ処理中ではその変数をつかって要素の値を参照することができます。