Expert Python Programmingのenumerate()関数の説明に物申す
タイトルは完全に釣りです。
最近、Expert Python Programmingを読んでいるのですが、enumerate()関数の説明が少し気になったので、突っ込んでみます。
P.35のenumerate関数の説明のところで、
>>> i = 0 >>> seq = ["one", "two", "three"] >>> for element in seq: ... seq[i] = '%d: %s' % (i, seq[i]) ... i += 1 ... >>> seq ['0: one', '1: two', '2: three']
と書くところを、enumerate()関数を使えば、
>>> seq = ["one", "two", "three"] >>> for i, element in enumerate(seq): ... seq[i] = '%d: %s' % (i, seq[i]) ... >>> seq ['0: one', '1: two', '2: three']
と書けるという説明だったのですが、enumerate()関数でインデックスと値を取得しているので、
>>> seq = ["one", "two", "three"] >>> for i, element in enumerate(seq): ... seq[i] = '%d: %s' % (i, element) ... >>> seq ['0: one', '1: two', '2: three']
のほうが自然ではないでしょうか。最終的にはリスト内包表記を使って、
>>> def _treatment(pos, element): ... return '%d: %s' % (pos, element) ... >>> seq = ["one", "two", "three"] >>> [_treatment(i, el) for i, el in enumerate(seq)] ['0: one', '1: two', '2: three']
と書くことを薦めていたので、問題はありませんが。