Python学習【365日チャレンジ!】72日目のマスターU(@Udemy11)です。
Pythonistaを毎日使っているのですが、Webでの日本語情報がかなり少ないように感じています。
この間のsetup.py
でのパッケージ化にしても、誰もやっていないのか、それとも他のやり方があるのか、ネットを探してもほとんど情報がないんですよね。
なので、Pythonをマスターできたら、Pythonistaに特化したサイトを作ろうかなと思っています。
いつのことになるのかは、まったくもってわかりませんが。。。。
それでは、今日もPython学習をすすめていきましょう。
昨日の復習
昨日は、組み込み関数について学習しました。
組み込み関数は、Pythonに最初から組み込まれている関数で、import
で読み込まなくても使うことのできる関数です。
これまで最も出現頻度の高いprint
関数も組み込み関数です。
その中で、昨日は、sorted
関数を学習しました。
test = {
'田中': 77,
'鈴木': 65,
'吉田': 91,
'大田': 55
}
r = sorted(test, key=test.get, reverse=True)
print(r)
出力結果
['吉田', '田中', '鈴木', '大田']
イテラブル変数である辞書型変数test
のvalue
を参照して、降順に並べ替えたkey
を出力しています。
すでに組み込み関数はたくさん学習していますが、Pythonの公式ドキュメントを見れば、他の組み込み関数を参照することが可能です。
それでは、本日学習する標準ライブラリに移りたいと思います。
標準ライブラリ
こちらの公式ドキュメントに、標準ライブラリの解説がありますが、たくさんありすぎて何がなんやらわかりません。
このすべてのライブラリを覚える必要はなく、これからも全く使わないライブラリがあることは間違いありません。
Pythonの開発者ですら、すべての標準ライブラリが頭に入っているわけではないと思います。
この中から、自分が開発したいアプリやサービスに必要なライブラリを使えばいいので、この段階で、
こんなに憶えられないよ〜!
と嘆く必要はありません。
辞書をすべておぼえる人はいないように、Pythonの標準ライブラリをすべて憶えている人もいません。
要は、使う必要が出てきたときに、公式ドキュメントを参考にして使い方がわかればいいわけです。
標準ライブラリの使い方
組み込み関数は、import
する必要なく利用することができました。
標準ライブラリは組み込み関数と違い、自作パッケージ同様に、import
で読み込む必要があります。
ちなみに、組み込み関数も標準ライブラリなのですが、Pythonでコードを書くにあたって必要不可欠なものを集めているため、import
でいちいち読み込むことなく、使えるようになっています。
使い方としては、これまでも学習してきたように
import ライブラリ名
もしくは
from ライブラリ名 import オブジェクト名
もしくは
from ライブラリ名.オブジェクト名 import メソッド名
で読み込めば、ライブラリのオブジェクトを使うことができます。
collectionsライブラリ
酒井さんの講座の中では、標準ライブラリの中でも、使用頻度の高いcollections
ライブラリが紹介されていました。
これらのcollections
オブジェクトの中から、defaultdict
について学習しました。
collections.defaultdict()
アルファベットの文字列の中からそれぞれのアルファベットの数を数えて辞書型データにまとめる方法を考えてみます。
a = 'kjoviajdoiajdljkfalemkakjdoifa'
d = {}
for i in a:
if i not in d:
d[i] = 0
d[i] += 1
print(d)
出力結果
{'k': 4, 'j': 5, 'o': 3, 'v': 1, 'i': 3, 'a': 5, 'd': 3, 'l': 2, 'f': 2, 'e': 1, 'm': 1}
まずは、これまで学習してきた知識を使った方法です。
文字列変数a
をループで回して、リスト型変数d
の中にアルファベットが存在しない場合、そのアルファベットをkey
にして、value
に0
を代入します。
その後、そのアルファベットのvalue
に1
をプラスしています。
文字列のfor
ループは、一つ一つの文字で区切られるため、同じアルファベットが出てきたときに数字がプラスされるので、文字列の中のアルファベットをカウントできるということですね。
また、辞書型のメソッドsetdefault
を使っても同じ出力が可能です。
a = 'kjoviajdoiajdljkfalemkakjdoifa'
d = {}
for i in a:
d.setdefault(i, 0)
d[i] += 1
print(d)
setdefault
は、辞書型のデータに、対象のkey
が存在しない場合は、指定したvalue
を追加して、対象のkey
が存在する場合は何もしないメソッドです。
出力結果は最初と同じになります。
では、最後にcollections
ライブラリのdefaultdict
オブジェクトを使ったコードを書いてみます。
from collections import defaultdict
a = 'kjoviajdoiajdljkfalemkakjdoifa'
d = defaultdict(int)
for i in a:
d[i] += 1
print(d)
出力結果
defaultdict(, {'k': 4, 'j': 5, 'o': 3, 'v': 1, 'i': 3, 'a': 5, 'd': 3, 'l': 2, 'f': 2, 'e': 1, 'm': 1})
標準ライブラリのcollections
ライブラリのdefaultdict
オブジェクトを読み込んで、整数をvalue
にする空の辞書型変数d
を定義します。
そのあと、for
ループで文字列a
を代入しながら、同じアルファベットに1
をプラスすることで、アルファベットをカウントしています。
sortedと組み合わせる
昨日学習した組み込み関数sorted
と組み合わせて使えば、出力結果をアルファベット順に並べることが可能です。
from collections import defaultdict
a = 'kjoviajdoiajdljkfalemkakjdoifa'
d = defaultdict(int)
for i in a:
d[i] += 1
s = sorted(d.items())
print(dict(s))
出力結果
{'a': 5, 'd': 3, 'e': 1, 'f': 2, 'i': 3, 'j': 5, 'k': 4, 'l': 2, 'm': 1, 'o': 3, 'v': 1}
items
は以前学習しましたが、sorted(d.items())
で、タプル化されたデータ
('key', value)
をkey
で昇順にソートしたリストになります。
それをさらに辞書型に戻した変数s
を出力しています。
必要なものを必要なときに
標準ライブラリについては、便利な使い方ができるものがたくさん用意されているのですが、実際にどのように使うのか、公式ドキュメントを読むだけでは分かりづらいと思います。
今回学習したcollections
にしても、こんな使い方があるってのはわかりましたが、実際にどのようなプログラムで使うのかをイメージするのは難しいですよね。
なので、これから具体的なプログラムを書いていく上で、必要になったときに学習すればいいわけで、いま使い方を憶えたとしても、記憶はどんどん忘れ去られていきます。
なので、
こんな使い方できるライブラリないかな?
と思ったときに、公式ドキュメントから使えそうなライブラリを探せばいいと思います。
どんなものでもそうですが、必要なものを必要なときに用意すればいいわけです。
Python学習も70日を超えて、どんどん内容が難しくなってくるので、思わず毎日更新を挫折しそうになりますが、次の目標である90日もそろそろ見えてきたので、しっかりモチベーションを保って頑張りたいと思います。
それでは明日も、Good Python!