何かを書き留める何か

数学や読んだ本について書く何かです。最近は社会人として生き残りの術を学ぶ日々です。

Pythonのソートキーに何を渡すべきか

Pythonのリストの中身をソートしたい場合、list.sort()sorted()を使う。 その際に何をキーとしてソートをするかをkey引数として渡すことができる。 よくある状況として、辞書を含むリストが存在し、辞書の特定のキーの値でソートしたい、という状況である。

import datetime
import random
import string

people = [
    {
        "name": "".join([random.choice(string.ascii_letters) for i in range(10)]),
        "birthday": datetime.date.fromordinal(random.randint(1, datetime.date.today().toordinal()))
     }
    for j in range(10**6)
]

今までは無名函数lambdaでキーを指定していた。

sorted(people, key=lambda x: x.get("birthday"))

最近、ソート HOW TO — Python 3.6.1 ドキュメントを読んでoperatorモジュールの函数を使うと高速にできるという情報を知った。

import operator

sorted(people, key=operator.itemgetter("birthday"))

長い物には巻かれろ、ということでソートHOW TOの記述を信じてソートキーにはoperatorモジュールの函数を使おう、と結論付けてもよいが、せっかくなので測定してみよう。 測定方法もtime.time()の差分ではなくtimeitを使ってみる。

key_lambda = timeit.timeit('sorted(people, key=lambda x: x.get("birthday"))', number=10, globals=globals())
key_operator = timeit.timeit('sorted(people, key=operator.itemgetter("birthday"))', number=10, globals=globals())

print("Lambda", key_lambda)
print("operator", key_operator)
Lambda 13.513277642467928
operator 11.774310869161361

確かにoperatorモジュールの函数の方が速い。 そういうことで、ソートキーにはoperatorモジュールを使おう。

第74回Python Mini Hack-a-thonに参加しました。

去る2017年3月25日に第74回Python Mini Hack-a-thonが行われた。

PyHackは第58回、第59回、第64回、第65回、第67回、第69回、第70回に参加している。 参加レポートがあるのは初参加の第58回のみである。もっと参加していたり、レポートを書いているつもりであったが気のせいであった。

xaro.hatenablog.jp

参加記録

内容は『Effective Debugging』を読み進めていた。

参加といいつつも大幅に遅刻して参加するという体たらくであったので、きちんと11時ごろに到着した。

デバッグの技術を66個伝える本なのに精神論が堂々とエントリされていることに驚く。

「起きてからさあ今日は数学をやるぞ」という心構えでは駄目という界隈に伝わる名言。

他の人の会話に耳を立てている。

正弦定理とか余弦定理とかは定理に名前を冠しているので覚えているが、正接はあまり思い出にない。

この後の記述にノートPCのケースが出てきた。

ヤングジャンプに連載されている『嘘喰い』にはラビリンス編とエア・ポーカーでモールス信号がでてきた。やはりいざという場合に役に立つか。

2章は総論なので長いという側面もあったが。

@mizuecastellaさんの発表に対する感想。趣味にプログラムを駆使するのはとてもよい。

PyHackの成果発表では@shinyorkeさんが発表時間を計測している。計測するようになってから時間内に終わるようになった。素晴らしい。

東京マラソンの個人記録をスクレイピングしようとした結果。懐かしい響きである。

youtu.be

本当に余談であるが、ノるどん2000の歌詞に「行き先 終点三つ前」とあるが、この時も終電の終点の3つ前が目的地であった。

今後の決意

今回、久しぶりにPyHackの参加記録を書こうと思ったのは理由がある。 1つは 2017/01/24 書き初め - 清水川Webを読んで「イベントに参加したらblogを書く」という一節にほうと感心したからである。 そのため、今年参加したイベントはいずれも参加記録を残している。このエントリが参加から時間がたっていたのは仕事で疲れ果てて書く気力が中々わかなかったからである。 今回このように書くことができてちょっと心の荷が下りたと思う。

もう1つは、PyHack後の打ち上げで@takanoryさん、@terapyonさん、@aodagさんから色々とやってみなよと励まされたからである。その記録を残して自分の励みにしようと思ったからである。

@takanoryさんからはPyCon JP 2016 1日目のLTからPython 3.6リリースパーティのLTの進歩(?)に触れ「海外のPyConでLTしなよ!」と。 @terapyonさんからは『Effective Python』『アルゴリズムクイックリファレンス 第二版』『初めてのPHP』の査読に触れ「技術書の監修・監訳をやろう!」と。 @aodagさんからは「PyConのプロポーザルだせ」と。

全部できるのかはわからないが、どれもできない話ではない。挑戦しよう。 僕はPythonと数学ができるのでそれらがテーマである技術書の監修・監訳・査読のお話があればTwitter経由でご連絡下さい。

僕が世間に出てきたのはPyCon JP 2015あたりからである。まだ仕事を初めて3年目であるが年数に関係なく躍進していきたい。

『初めてのPHP』の査読を担当しました

20167年3月18日にオライリージャパンから『初めてのPHP』の邦訳が発売される。

www.oreilly.co.jp

この度、邦訳の査読者として参加させていただいた。

オライリージャパンの方から話があったのは1月頃であった。 原著の『Learning PHP』が初心者向けならば、他言語の経験がある人の立場から見て、という体で引き受けた。 仕事でPythonを使い始め、Web周りの技術を扱っているのでそのような人間がPHPに入門したら、というイメージである。 前書きの「本書の対象読者」にも「PHPを抑えておきたいPerlPythonRubyプログラマ。」とある。

大まかに4部構成となっていて、第一部はPHPの基本として言語的な話、第二部は実践編としてPHPを使ったWeb開発、第三部はPHPに限らないプログラム開発の一般論、最後の第四部は各論という内容である。 旧版にあたる『初めての PHP5 増補改訂版』と比べてPHPを使ったWeb開発、一般論、各論が充実している。 旧版を読んだ方も改めて読めばPHP7向けに知識をアップデートする以上の利益を得ることができるであろう。

私は、今回初めてPHPに触れた。 印象として「細かい罠が多いな」というものがある。

世の中には「入門」と書いてあるのに門前払いされる場合も多々あるが、PHPはすぐに入門できる。 しかし、=====で振る舞いが違うとか、セキュリティ面で問題があるとか、入門から中級者への段差が高い印象を受けた。 PHPの公式リファレンスは日本語も充実しているので、この本や『プログラミングPHP』などで基礎体力をつけてPHPエンジニアを目指していただけば幸いである。