2016-05-09 11 views
1

私はこれ試してみてください。私はこのような値を取得する場合インデックスを使用してPython 3によるマップ関数の結果から値を取得する方法は?

def test(x): 
    return x**2 

a = map(test,[1,2,3]) 

を:

for i in a: 
    print(a) 

私は1,4,9を取得し、これは完璧に動作します。

私がこれを行う場合:a[0]。エラーが発生します。 subsciptableない

type(map(test,[1,2,3])) == <class 'map'> 

私はmap関数の結果は、マップクラスであるので、それは知っています。

インデックスを使用してマップ関数の結果の値を取得するにはどうすればよいですか?

注:

a = list(map(test,[1,2,3])) 

次にあなたが個々の要素にアクセスするには、リストのインデックスを使用することができます。この動作はlistオブジェクトにmapオブジェクトを変換するのpython 3.

答えて

1

に固有のものです。

+0

これは完全に機能します。しかし、 'a = map(test、[1,2,3])'と 'a = list(a)'を実行すると、 'a'は' [] 'になります。なぜか教えてくれますか? –

+0

これは、 'map()'が消費するイテレータを返すことと関係があると思います。 'list(a)'を2回印刷してみて、初めてリストがどのように印刷されるかを見てください。 –

+0

@マーズリー私はこれに関する答えを書いています。 –

1

Python 3の組み込みmap()関数は、イテレータを返します。いったんイテレータを消費すると、イテレータは消耗しますが、それ以上の結果は得られません。

a = map(lambda x: x**2, [1,2,3]) 
for i in a: print(a) 

結果:

1 
4 
9 

今してみてください、

a.__next__() 

イテレータがすでに消耗しているとしてそれは、あなたにStopIterationエラーを返します。

インデックスを使用するには、前の回答で示唆したようにlistを使用できます。

+0

ありがとうございました!これは本当に明白です。私は今日私の投票を使います。私は明日あなたにアップヴォートを与えます。あなたが気にしないことを願っています。 –

関連する問題