2017-11-13 14 views
1

申し訳ありませんが、初心者のpythonコーダーです。 私はPyCharmでこのコードを書いた:TypeError: 'int'オブジェクトはマップ関数では反復できません

lst_3 = [1, 2, 3] 

def square(lst): 
    lst_1 = list() 
    for n in lst: 
     lst_1.append(n**2) 

    return lst_1 


print(list(map(square,lst_3))) 

を、私はこのタイプのエラーを持っている:TypeError例外:「int型のオブジェクトが反復可能ではありません。 私のコードのエラーは何ですか?

+0

あなたが投稿したコードが奇妙な字下げをしているのを見て、それを修正できますか? – DarkCygnus

+0

'map'は各要素(あなたのケースのスカラー)で機能する関数を持っています。 –

+3

'' square'を 'lst_3'に' '写像すると、各数値は順番に' 'square'に渡されます。あなたは数字の上で_iterate_する必要はありません。 –

答えて

1

ここでの問題は、mapが行っていることの誤解です。ここに代表的な例があります。私は数をエコーし​​て返すような並べ替えの「同一性」関数を作成しました。私はmapリストにこの機能は、あなたがプリントアウトされますかを見ることができます:リストの各要素mapによって、今度にfooに渡されることをここ

In [382]: def foo(x): 
    ...:  print('In foo: {}'.format(x)) 
    ...:  return x 
    ...: 

In [386]: list(map(foo, [1, 2, 3])) 
In foo: 1 
In foo: 2 
In foo: 3 
Out[386]: [1, 2, 3] 

お知らせ。 fooはリストを受信しません。あなたの間違いは起こったと思っていたので、番号を繰り返して、エラーが表示されました。

あなたはあなたのケースで行う必要があり何、このようなsquareを定義している:

In [387]: def square(x): 
    ...:  return x ** 2 
    ...: 

In [388]: list(map(square, [1, 2, 3])) 
Out[388]: [1, 4, 9] 

squareそれはスカラーを受け取るという仮定の下で動作するはずです。

また、あなたは同じ効果にlambdaを使用することがあります。

In [389]: list(map(lambda x: x ** 2, [1, 2, 3])) 
Out[389]: [1, 4, 9] 

、これはそれを行うの関数型プログラミング方法です覚えておいてください。参考までに、リスト内包表記を使用するほうが安いでしょう:

In [390]: [x ** 2 for x in [1, 2, 3]] 
Out[390]: [1, 4, 9] 
関連する問題