Python 関連の覚え書き

学習するのに必要な情報源 一覧

Pythonに詳しい人に良い参考書ありますかと尋ねたところ、このホームページが一番いいよとのアドバイスを頂きました。当面プログラムの学習には参考書は買わない事にしました。

Python プログラム言語の覚書 
(※私の大まかな覚え書きなので、プログラムの勉強をされる方は、他のホームページを参考にされた方が良いです。)

1. タプルとリストの違い
タプルもリストと同じで、複数の要素を管理できるロッカーみたいなものです。タプルとリストの決定的な違いは、リストが要素を変更可能であるのに対して タプルは要素の変更が不可 です(変更可能であることを ミュータブル(mutable) 、変更不可であることを イミュータブル(immutable) とも言います)。つまり、タプルは一度作成すると、要素の上書きや追加・削除ができません。
これだけ見ると、使いどころが限られてしまい「なぜタプルというものが存在するのか」疑問に思われるかもしれません。タプルがPythonで用意されている理由は、以下の3点にあると思ってください。


リストよりも高速に動作する


一般的なプログラミング言語では、便利に使える関数・メソッド・オブジェクトほど処理が遅くなる傾向があります。タプルの方がリストよりも機能が少ない分、処理が高速になります。ただし、現在のコンピュータの性能を踏まえると、その恩恵はさほど感じにくいかもしれません。


定数値として使える


変数について紹介したときに「どういう目的で使うものかが把握しやすい名前をつける」ことを説明しました。たとえば「繰り返しの回数」のような 不変な数値や文字列 であっても、変数に格納する(名前をつけて管理する)ことで目的や意図が把握しやすくなります。このようにした変数のことを 定数 と呼んでいます。タプルも同じで、複数のデータを管理したいけど変更する予定がないときにタプルを使います。


辞書のキーでタプルを使える


2. zip() について
Pythonの標準関数 zip() を用いると、複数のリストを1つにまとめることができます。


>>> a0 = [ 1, 2, 3] >>> a1 = [ 4, 5, 6] >>> a2 = [ 7, 8, 9] >>> a3 = [10, 11, 12]

>>> temp_a = zip(a0, a1, a2, a3)

>>> a = list(temp_a)

>>> print(a) [(1, 4, 7, 10), (2, 5, 8, 11), (3, 6, 9, 12)]

>>> print(a[0]) (1, 4, 7, 10)

>>> print(a[1]) (2, 5, 8, 11) >>> print(a[2]) (3, 6, 9, 12)

>>> type(a[0]) <class ‘tuple’>


ただし注意点が2つ。まず、新しいリストにできた各要素はタプルになります。また、[(1, 2, 3), (4, 5, 6), ...] とはならず、縦に並ぶ要素でリストの1要素(タプル)が作られます。


3. enumerate() について
同じくPythonの標準関数 enumerate() を使うと、(カウンタの数値, リストの要素) というペアでできたタプルを格納するリストを生成します。


>>> sports = [“baseball”, “soccer”, “volleyball”, “golf”, “tennis”]

>>> temp_sports = enumerate(sports, 1)

>>> sports_tl = list(temp_sports)

>>> print(sports_tl) [(1, ‘baseball’), (2, ‘soccer’), (3, ‘volleyball’), (4, ‘golf’), (5, ‘tennis’)]


2番目の引数の整数値は省略可能です。その場合、カウンタの数値は0からスタートします。増分の指定はできません。


4. セットとは何か
セット(set) は日本語で言うと「集合」です。「集合」は、単なるグループだと思ってもらって構いません。「電車で通勤する人」「タバコを吸う人」などのような枠組みです。
あるデータが特定のグループに「あるかないか」、それだけです。つまり、セットでは同じ内容のデータを重複して登録することができません。グループの中に全く同じデータは2つ以上ありません。1つだけです。また、セットはシーケンスではないので、順序は保証されません 。
簡単に言えば上記のとおりですが、厳密にはPythonでの「集合」は、数学で学んだ「集合」を指しています。そのため、「和集合」「積集合」など、集合に関する演算がPythonでは簡単に実行できます


セットを生成する際には重複する要素は取り除かれます。
また、ディクショナリからセットを生成すると、キーがセットの要素となります。

セットはシーケンスではないので、スライスによる参照はできません。


どうしてもセットの要素を1つずつ参照して処理を行いたいときは pop() メソッドが使えます。ただし pop()はセットから要素を1つ取り出してしまう破壊的メソッド になるので注意してください。また、並び順が保証されていないため、何が取り出されるかは実行する環境やタイミングによって変わります。
>>> s = sports.pop()

>>> print(s) baseball

>>> print(sports) {‘soccer’}


要素の全削除は clear() メソッドを使いましょう。
なお、セットでは、特定の要素の更新はできません。remove(), discard(), pop() で削除 → add() で追加 といった形で対応してください。


 オブジェクトのID(識別番号)
「Pythonでは全てのデータはオブジェクトの形をしている」


Pythonでは、文字列や数値のデータが同じものはIDが同じになる という性質があります。


5. オブジェクトのハッシュ値
オブジェクトの値が重複しているかどうかは、オブジェクトの ハッシュ値 を見て判断しています。ハッシュ値もIDと同じく整数値です。オブジェクトが違えばIDが異なるのに対し、オブジェクトが異なるものでも中身のデータが完全に一致していればハッシュ値は同一の数値になります 。


6. 辞書とは何か
辞書もリストやタプルと同じロッカーみたいなものですが、番号ではなく「名前つきのロッカー」だと思ってください。「田中さんのロッカー」「鈴木さんのロッカー」みたいなものです。各要素につける名前のことを キー と呼びます。辞書にデータ(値)を新しい要素として登録する際は、値とキーをペアにしなければなりません。格納された特定の要素を参照する場合は、キーを指定して値を取得することになります。


タプルもキーにすることができます。
>>> high_degree = {(2018, 5, 1): 28, (2018, 5, 2): 25, (2018, 5, 3): 27, (2018, 5, 4): 24}

>>> print(high_degree) {(2018, 5, 1): 28, (2018, 5, 2): 25, (2018, 5, 3): 27, (2018, 5, 4): 24}


ここでは high_degree という名前の辞書を作り、(年, 月, 日) をキーとして、その日の最高気温を値として格納しています。このように、タプルを辞書のキーとすることができます、が、リストをキーにすることはできません。リストは要素が変更可能(ミュータブル)であるため、キーが唯一無二である保証をすることができなくなるからです。



Techacademy に追記

PAGE TOP