『Effective Python』の続き。そろそろAmazonのリンクは目障りなので外す。アフェリエイトなどやっていないのでね…。 www.effectivepython.com
互いに関連している複数のリストを処理する際に、
names = ['Cecilia', 'Lise', 'Marie'] letters = [len(n) for n in names] longest_name = None max_letters = 0 for i in range(len(names)): count = letters[i] if count > max_letters: longest_name = names[i] max_letters = count print(longest_name)
というコードを書かずにzip
ですっきり書こうぜ、という話。
zip
の注意点はイテレータの長さが違うと最も短いイテレータで切り詰めてしまうこと。
公式ドキュメント2. 組み込み関数 — Python 3.4.2 ドキュメントから引用すると、
zip() は、等しくない長さの入力に対しては、長い方のイテラブルの、終端の対にならない値を気にしないのでなければ、使うべきではありません。そのような値が重要なら、かわりに itertools.zip_longest() を使ってください。
のように、itertools.zip_longest()
を使えばよい。