25

私はmapPython3で使用しようとしています。私が使用しているコードは次のとおりです。

import csv

data = [
    [1],
    [2],
    [3]
]

with open("output.csv", "w") as f:
    writer = csv.writer(f)
    map(writer.writerow, data)

ただし、mapPython3 ではイテレータを返すため、このコードは Python3 では機能しません (ただし、Python2 のバージョンではmap常に が返されるため、正常に機能しますlist) 。

私の現在の解決策は、イテレータに関数呼び出しを追加しlistて評価を強制することです。しかし、それは奇妙に思えます (戻り値は気にしません。なぜ反復子をリストに変換する必要があるのでしょうか?)

より良い解決策はありますか?

4

6 に答える 6

6

これを行うために、長さゼロの両端キューを設定できます。

with open("output.csv", "w") as f:
    writer = csv.writer(f)
    collections.deque(map(writer.writerow, data),0)

itertools.consume(iterator, None)これは、レシピが機能するのと同じ方法です。リストを作成せずにイテレータを機能的に使い果たします。

の消費レシピをそのまま使用することもできますitertools

しかし、ループは私にとってより読みやすく、Pythonic ですが、YMMV.

于 2013-08-25T20:55:09.297 に答える