この連載では、Pythonについて色々な形で再学習に取り組んでいます。前回の記事はこちらになります。
前回までで、リスト、タプル、集合、辞書について学びました。
これらは反復可能オブジェクト(イテラブル)と呼ばれます。文字列型のデータも反復可能オブジェクトです。
反復可能オブジェクトの概要
今回はこれらについて、まとめてみようと思います。まずはそれぞれの概要から見ていきましょう。
文字列
文字通り、文字列を扱うオブジェクトです。他のプログラミング言語と違って、Pythonではインデックスを使って特定の文字を取り出すことができるので便利です。スライス機能を使えるのも便利ですね。
リスト
僕の感覚では、リストがイテラブルの基本です。最初にリストについて徹底的に学ぶと、その後のPython学習がはかどるのではないのでしょうか。ミュータブルで、インデックスを使ってデータを取り出せて、スライスや内包表記も使えるので、一番使うデータ形式だと思います。
タプル
タプルはイミュータブル(修正できない)リストといった感じですが、実際には関連するデータグループを扱う場合に使うようです。「tuple」とは「複数の構成要素からなる組を総称する概念」を意味するそうです。辞書のitemsメソッドを使ってリストに変換すると、リストの要素はキーと値のタプルになるのも、この道理でしょうか。また、タプルはイミュータブルなので、リストなどと違って辞書のキーにも使えます。学習を進めていくと、関数とかモジュールから帰ってくる値はタプル形式が多いようです。
集合
複数の集合から、内部の値がどのように所属しているかを簡単に確認できます。他のプログラミング言語には、見かけませんね。リストから集合に変換して値を確認、結果をリストに変換するといった使い方が多そうです。1つの集合内に値の重複を許しません。重複して指定すると、重複部分は削除されます。この性質を使えば、リストの要素の重複部分を削除できたりします。また、要素順序が保持されない点などは注意が必要です。
辞書
キーで管理するデータの集りです。リストやタプルはインデックスに整数を指定して値を確認できましたが、辞書ではインデックスにキーを指定します。キーは重複を許しません。また、キーはイミュータブルでなければなりません。Python3.7以降では辞書内のキーの順番が保持されるようになったので、使いやすくなりました。
まとめ
以上、反復可能オブジェクトの概要でした。簡単にまとめると以下のようになりますね。
特性 | 文字列 | リスト | タプル | 集合 | 辞書 |
---|---|---|---|---|---|
ミュータブル | ✕ | 〇 | ✕ | 〇 | 〇 |
イミュータブル | 〇 | ✕ | 〇 | ✕ | ✕ |
要素に順序がある | 〇 | 〇 | 〇 | ✕ | 〇※ |
要素の重複 | 〇 | 〇 | 〇 | ✕ | キーの重複は✕。値の重複は〇。 |
要素の種類 | 文字 | 任意 | 任意 | 任意 | キーはイミュータブル。値は任意。 |
スライス | 〇 | 〇 | 〇 | ✕ | ✕ |
内包表記 | ✕ | 〇 | ✕ | 〇 | 〇 |
※Python3.7以降では辞書内のキーの順番が保証されるようになりました。
また、これ以外にrange関数で生成されるrange型も反復可能オブジェクトです。range型は指定された条件と範囲で整数を順番に返します。主にfor文で使います。
その他のデータ型
その他の代表的なデータ型についても、ここで見ていきたいと思います。ここでご紹介するデータ型は、すべてイミュータブルです。
int
整数型。整数を扱います。
整数型でも「オブジェクトID」が割り当てられますが、 -5~256までの整数はオブジェクトの配列が保持されていて、その範囲でintをつかうと既存のオブジェクトIDが返されるそうです。よく使う値だからということだと思います。
a = 1 b = 1 print(id(a)) # 140727071773480を返す print(id(b)) # 140727071773480(同じID)を返す a = 257 b = 257 print(id(a)) # 1848968008432を返す print(id(b)) # 1848968008784(違うID)を返す
この様に、-5~256以外の整数では異なる挙動を示します。この他にも一部の文字データなどは、既存のオブジェクトIDを返すようです。
float
浮動小数点型。小数点の部分を持つ数値を扱います。
bool
真偽型。TrueかFalseの値を取ります。if文やwhile文でよく使います。
次回は関数
いかがでしょうか。反復可能オブジェクトと、その他のデータ型についてまとめてみました。次回から関数に取り組みたいと思います。お楽しみに!!