とある地方大学生の生き方

学生。主にプログラミング関連の記事を書きます。

Pythonアウトプット Part2

f:id:Reiji_Kusuzawa:20210526015610j:plain

 

Pythonアウトプット記事です。完全自己満足なので、大学生がpythonやってんだな~程度に眺めていただけると良いのかなと思います。

参考書籍はPart1で紹介しています。

 

オブジェクトとdir()関数

オブジェクトに含まれるメソッドの一覧を得ることが出来る。

オブジェクトとは、データの値、付加情報、データを操作するためのメソッドなど、データに関する機能を一式そろえた一塊のもののことだそう。

Pythonでは全ての値はオブジェクトに当たる。

 

試しに整数値、15に含まれるメソッドをdir関数で調べてみる。

 

-<エディタ>----------------------

  print(dir(15))

---------------------------------------

-<コマンドライン>-------------

['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__gt__', '__hash__', '__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'as_integer_ratio', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']

---------------------------------------

15という単なる整数値だが、Pythonでは様々なメソッドが内包されていることが分かる。

 

試しにbit_lengthメソッドを使ってみる。(2進数で何桁で表示できるかが分かるメソッド。)

 

bin()関数で10進数の値を2進数に表示できます。

ちなみにoct()で8進数。hex()で16進数。

-<エディタ>----------------------

n = 15
print(n.bit_length())

print(bin(n))

---------------------------------------

-<コマンドライン>-------------

4
0b1111

---------------------------------------

15は0B1111ということなのでbit_length()の結果は4ケタで合ってますね。

 

 

リストをいじる関数やメソッド

enumerate()関数

 enumerate()関数はリストからインデックス番号付きのデータを得る

※enumerate:列挙する

 

append()メソッド

要素の末尾にデータの格納が出来る。

-<エディタ>----------------------

nums = [1,5,8]


nums.append(4)


print(nums)

---------------------------------------

-<コマンドライン>-------------

 [1, 5, 8, 4]

---------------------------------------

リストnumsにデータ4が格納された。

 

+=演算子、extend()メソッドでリスト同士の結合もできる。

 

リストのスライス

リスト[開始 : 終了 : ステップ]

リスト[a : b : step]

 

リスト中のインデックス番号aからb-1のデータを取り出すことができる。

range()関数と似てる?どれも終了がn-1のインデックス番号の値だ。

インデックス番号は0から始まるのはどの言語も共通認識。

 

ステップの部分に2を入れると二つ飛ばし、3を入れると3つ飛ばしでデータを取り出せる。

これもrange()関数に似たような仕組みがあった。

 

リストの親戚「タプル(tuple)」さん

タプルは(1, 2, 3)と丸括弧で表現する。※リストは[1, 2, 3]だった。

 

リストと違う点は、一度生成したタプルは内容を変更できない点。

 

list()関数、tuple()関数でそれぞれ相互に変換が可能。

 

さらにお隣の「集合型(set)」さん

集合型(set)もリストと似たようなもの。{1, 2, 3}のように波括弧で表現。

ただし、こちらは

特徴1 : 重複する値を持たせることが出来ない。

特徴2 : 順序を持たせることが出来ない。

 というような特徴を持つ。

 

二つ以上の集合型があると、便利に使える?

「 - 」演算子で二つの集合型の差分が採れる。これが集合型の真骨頂らしい。

ITパスポートの勉強でもデータ操作関連の項目があって、こんな操作をした覚えが。

-<エディタ>----------------------

# 集合型name1,name2の差分を標示

name1 = {"佐藤", "鈴木", "田中", "山田"}
name2 = {"鈴木", "田中"}

print(name1 - name2)

---------------------------------------

-<コマンドライン>-------------
{'山田', '佐藤'}

---------------------------------------

name1の集合から鈴木・田中のデータを除いた山田・佐藤が残った。集合型name1と差分の順序に関して、何故か佐藤と山田の順序が逆になって出力されている…。集合型は順序を持たせることができないということを物語っているのだろうか。

 

集合型を扱える他の演算子

「 | 」演算子で集合型を一つにまとめられる。

「 & 」演算子で集合型の共通する部分を抜き取れる。

 

アウトプットは以上。

 

 

Pythonアウトプット、記事を書く分インプットの速度が落ちるので、どうしようかなと検討中…。奇跡として残るのはなんとなく気持ちが良いけれど。(はたしてこれは良いことなのか…。)