導入
Python は「バッテリー同梱(batteries included)」と言われるほど、標準ライブラリ(追加インストールなしで使える機能)が充実しています。第6章で math と random に触れましたが、ここでは日付、正規表現、コレクション操作まで一気に見て回ります。
説明
datetime は日付・時刻を扱うモジュールです。
import math
import datetime
print(math.sqrt(2))
print(round(math.pi, 2))
today = datetime.date(2024, 4, 1)
nextday = today + datetime.timedelta(days=30)
print(nextday)
today + datetime.timedelta(days=30) のように、日付どうしの足し算・引き算ができます。手で「何月何日か」を計算しなくてよいので便利です。
re(正規表現)は、文字列から特定のパターンを探したり抜き出したりするモジュールです(正規表現そのものの詳しい書き方は別の教材で扱います)。
import re
text = "注文番号: A1234, B5678"
codes = re.findall("[A-Z]\\d+", text)
print(codes)
m = re.match("(\\d{4})-(\\d{2})-(\\d{2})", "2024-04-01")
print(m.group(1), m.group(2), m.group(3))
re.findall(パターン, 文字列) はパターンに合う部分をすべてリストで返します。re.match は文字列の先頭がパターンに合うか調べ、合えば () で囲んだ部分(グループ)を .group(番号) で取り出せます。
collections は、標準の list や dict を少し便利にした型を集めたモジュールです。Counter は「数える」専用の辞書、defaultdict は「キーが無いときの初期値」を自動で用意してくれる辞書です。
from collections import Counter, defaultdict
votes = ["A", "B", "A", "C", "B", "A"]
print(Counter(votes))
groups = defaultdict(list)
groups["fruit"].append("apple")
groups["fruit"].append("banana")
print(dict(groups))
Counter(votes) は「集計」を一発でやってくれます。defaultdict(list) は groups["fruit"] に何も入っていなくても、最初のアクセス時に自動で空リストを用意してくれるので、if "fruit" not in groups: groups["fruit"] = [] のような前準備が要りません。
やってみよう
text の中身や re.findall のパターンを変えたり、votes の中身を変えて集計結果がどう変わるか確かめましょう。
演習
from collections import Counter を使い、"cat dog cat bird dog cat".split() で作った単語のリストを Counter に渡して、その結果を表示してください(結果は Counter({'cat': 3, 'dog': 2, 'bird': 1}))。
ヒント1を見る
words = "cat dog cat bird dog cat".split() で単語のリストを作ります。
ヒント2を見る
print(Counter(words)) で表示します。