これまで、 整数や実数、 文字列 などの データ型 を紹介してきました。また、複数のデータを順番に登録する リスト と タプル や、データとデータの対応関係を登録する 辞書 も紹介しました。
いろいろなデータ型が出てきて、困ってしまいますね。実のところ、これはまだまだ序の口で、これからももっとたくさん出てきます。
そんなにたくさんの種類があると、それぞれ全部の使い方をいちいち覚えておくのは大変です。そこで、Pythonなど、多くのプログラミング言語では、似たような種類のデータ型をグループとしてまとめ、それぞれのグループは同じような方法で使えるようになっています。
これなら、全部の種類のデータ型について、いちいち細かいところまで覚えておかなくても、それぞれのグループについて勉強しておくだけでだいたい使えるようになります。
ここでは、そういったグループの中から、コレクション を紹介します。
コレクション¶
数値オブジェクトは、物質の重さや長さなど、いろいろなデータの値を直接あらわすオブジェクトです。一方、 リストや辞書は、直接的なデータではなく、いろいろなデータを登録して、集約しておくために使われるオブジェクトです。
リストやタプル、辞書のように、他のオブジェクトを集約することを目的とした種類のオブジェクトのことを、
コレクション (Collection)
と呼びます。
また、"ABC"
のような 文字列 も、文字 A
、B
、C
を集約したオブジェクトですので、コレクション の仲間です。
dict_obj = {"dog": "犬", "cat": "猫"}
print("辞書の要素数は:", len(dict_obj))
タプルオブジェクトの要素数は、次のように求められます。
tuple_obj = (1, 2, 3)
print("タプルの要素数は:", len(tuple_obj))
リストオブジェクトの要素数は、次のように求められます。
list_obj = [1, 2, 3, 4]
print("リストの要素数は:", len(list_obj))
文字列オブジェクトの文字数は、次のように求められます。
str_obj = "12345"
print("文字列の長さは:", len(str_obj))
辞書・タプル・リスト・文字列と、どの型のオブジェクトでも、コレクション であれば、同じように len()
関数で要素の数を求められます。
len()
関数については、while文を使ったリストのループ処理 でも紹介していますので参照してください。
dict1 = {"dog": "犬", "cat": "猫"}
dict2 = {"dog": "犬", "cat": "猫"}
print("dict1とdict2は等しいか?", dict1 == dict2)
list1 = [1, 2, 3]
list2 = [1, 2, 4]
print("list1とlist2は等しいか", list1 == list2)
!=
演算子でコレクション同士を比較すると、同じ値のコレクションならFalse
を、異なっていれば True
を返します。
dict1 = {"dog": "犬", "cat": "猫"}
dict2 = {"dog": "犬", "cat": "猫"}
print("dict1とdict2は異なる値か?", dict1 != dict2)
list1 = [1, 2, 3]
list2 = [1, 2, 4]
print("list1とlist2は異なる値か?", list1 != list2)
list_obj = ["pen", "book", "notebook"]
if "book" in list_obj:
print("list_objにbookが登録されています")
"book" in list_obj
という式は、list_obj
に "book"
という文字列が登録されていれば True
を、登録されていなければ False
を返します。
list_obj = ["pen", "book", "notebook"]
print("book" in list_obj) # list_obj に "book" が含まれているか -> True
print("pencil" in list_obj) # list_obj に "pencil" が含まれているか -> False
タプルオブジェクトも、同様に in
演算子で要素の存在を確認できます。
tuple_obj = [2, 3, 5, 7, 9]
print(5 in tuple_obj) # tuple_obj に 5 が含まれているか -> True
print(11 in tuple_obj) # tuple_obj に 11 が含まれているか -> False
辞書の in 演算子¶
辞書オブジェクトの場合、in
演算子は指定した キー が 登録されているかどうかを調べます。
次の辞書 dict_obj
は、以下のような要素を登録しています。
dict_obj = {"dog": "犬", "cat": "猫", "parrot": "オウム"}
キー(英単語) | 値(日本語) |
---|---|
dog | 犬 |
cat | 猫 |
parrot | オウム |
この辞書に cat
という単語が登録されているか調べる場合は、in
演算子を使って次のように記述します。
dict_obj = {"dog": "犬", "cat": "猫", "parrot": "オウム"}
if "cat" in dict_obj:
print("catは", dict_obj["cat"], "です")
辞書の in
演算子については、in 演算子 でも紹介していますので参照してください。
文字列の in 演算子¶
文字列オブジェクトの場合も、in
演算子で中に文字が含まれているかどうかを確認できます。
str_obj = "hello world"
print("w" in str_obj) # "w" は str_objに含まれているか -> True
print("a" in str_obj) # "a" は str_objに含まれているか -> False
リストやタプルなど、他の種類のコンテナの場合、in
演算子に値として指定できるのは次のように一つだけです。
3 in [1,2,3,4,5]
しかし、文字列の場合には、1文字だけでなく、一連の文字を指定して検索できます。
例えば、文字列 abracadabra
に cad
という文字列が含まれているかどうか調べる場合は、次のように書けます。
str_obj = "abracadabra"
print("cad" in str_obj) # "cad" は str_obj に含まれているか -> True
print("rad" in str_obj) # "rad" は str_obj に含まれているか -> False
for文¶
コレクションは、for文によるループ で紹介した for
文に指定して、コレクションの要素ごとに、for
文に記述した処理を実行できます。
次の処理は、リストオブジェクトの要素を、upper() メソッド を使って大文字に変換してから出力します。
list_obj = ["apple", "orange", "banana"]
for fruit_name in list_obj:
upper_name = fruit_name.upper()
print(upper_name)
タプルの場合も、同様に for
文を使用できます。
tuple_obj = ("apple", "orange", "banana")
for fruit_name in tuple_obj:
upper_name = fruit_name.upper()
print(upper_name)
文字列を for
文に指定すると、文字列中の文字を一文字づつ取り出します。
str_obj = "hello"
for letter in str_obj:
upper_letter = letter.upper()
print(upper_letter)
この処理では、文字列 str_obj
から文字を1文字ずつ取り出して変数 letter
に代入し、upper()
メソッドを使って大文字に変換してから出力しています。
dict_obj = {"dog": "犬", "cat": "猫", "parrot": "オウム"}
for english in dict_obj:
japanese = dict_obj[english]
print(english, "は", japanese, "です")
この処理では、辞書 dict_obj
に登録されている要素のキーを一つづつ取り出して、変数 english
に代入しています。変数 english
の値は、最初の一回目では dog
、2回目は cat
、3回目は parrot
になります。
for
ループ内にある次の処理
japanese = dict_obj[english]
は、取り出されたキー値(変数 english
)を使って dict_obj
からキー値に対応する値を取り出し、変数 japanese
に代入しています。
最後に、変数 english
と japanese
を使って、要素を print()
しています。