2008.12.05
Python 3.0ではリスト、セット、ディクショナリのいずれでも内包表記(comprehension)が使える
現地時間の12/3、Python 3.0がリリースされた。

Python 3.0
http://python.org/download/releases/3.0/
What’s New In Python 3.0
http://docs.python.org/3.0/whatsnew/3.0.html

Python 3.0の新機能・変更点については、私もまだ全貌を把握できていないのだが、ひとまずセット(集合)が使いやすくなったのはうれしい。

>>> {3, 2, 1}
{1, 2, 3}
>>> {1, 2, 3, 1, 2}
{1, 2, 3}

そして、従来のリストだけでなく、このセットでも、ディクショナリでも、内包表記(comprehension)(注)が使えるようになった。

Let's discuss the matter further - Comprehension consistency at last in Python 3.0!
http://rhodesmill.org/brandon/2008/comprehension-consistency-at-last-in-python-30/

この記事にある例を借りれば、こう書けるようになった。

>>> [ n*n for n in range(5) ]
[0, 1, 4, 9, 16]
>>> { n*n for n in range(5) }
{0, 1, 4, 16, 9}
>>> { n: n*n for n in range(5) }
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

なお、ここで range(5) は、[0, 1, 2, 3, 4] のリストだと思ってほしい(本当はイテレータ)。

リストとディクショナリはきわめて使用頻度が高く、リスト内包表記もかなり使う。Python 3.0ではセットも使いやすくなり、セットとディクショナリでも内包表記が使えるようになったので、これだけでも生産性・コード可読性がかなり上がるだろう。

注)内包表記(comprehension)
コレクション(要素をいくつか含むもの)の各要素を変換して別のコレクションを作る操作(写像、map)と、コレクションの各要素のうち特定条件を満たすものから別のコレクションを作る操作(filter)を同時に、わかりやすく表現できるようにしたもの。
タグ: