hack のためのネタ帳, etc,,,

python3 では map() の結果が iterator になっているらしく、以下のように 2 回以上トラバースさせようとすると、2 回目以降が空になる。
def print_twice(X):
    for i in range(2):
        for x in X:
            print(x)
X=(map(lambda x: x, range(2)))
print_twice(X)
0
1
list() でリスト化してやると良さそうだが、呼び出す側でリスト化するのは、呼び出される側の事をいちいち考えて呼ばないといけないのでなんか微妙
def print_twice(X):
    for i in range(2):
        for x in X:
            print(x)
X=(map(lambda x: x, range(2)))
print_twice(list(X))
かと言って呼び出される側でリスト化すると今度は、オーバーヘッドが気になりそうな気も?
def print_twice(X):
    X=list(X)
    for i in range(2):
        for x in X:
            print(x)
X=(map(lambda x: x, range(2)))
print_twice(X)
どうするのが正解なんだろう?
参考:
タグ

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Wiki内検索

フリーエリア

管理人/副管理人のみ編集できます