読者です 読者をやめる 読者になる 読者になる

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']

と書くことを薦めていたので、問題はありませんが。