2017-11-13 2 views
1

Tut mir leid, ich bin ein Newbie Python Coder. Ich schrieb diesen Code in PyCharm:TypeError: 'int' -Objekt ist in der Kartenfunktion nicht iterierbar

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))) 

und ich habe diese Art von Fehlern: Typeerror: 'int' Objekt ist nicht durchsuchbar. Was ist der Fehler in meinem Code?

+0

Ich sehe, dass der Code, den Sie posteten, eine merkwürdige Einrückung hat, können Sie das regeln? – DarkCygnus

+0

'map' hat eine Funktion für jedes Element - in Ihrem Fall ein Skalar. –

+3

Wenn Sie "Quadrat" zu "lst_3" zuordnen, wird jede Zahl der Reihe nach an "Quadrat" übergeben. Sie müssen nicht über eine Nummer _ermitteln_. –

Antwort

1

Das Problem hier ist Ihr Missverständnis was map tut. Hier ist ein repräsentatives Beispiel. Ich habe eine Art "Identitäts" -Funktion erstellt, die nur eine Zahl wiederholt und zurückgibt. Ich werde map diese Funktion auf eine Liste, damit Sie sehen können, was gedruckt ist:

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] 

Hinweis hier, dass jedes Element in der Liste foowiederum übergeben wird, durch map. foo erhält keine Liste. Ihr Fehler dachte, dass es so war, also haben Sie versucht, über eine Nummer zu iterieren, die zu dem Fehler führte, den Sie sehen.

Was Sie in Ihrem Fall tun müssen, ist square wie folgt definieren:

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

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

square sollte unter der Annahme arbeiten, dass es einen skalaren erhält.

Alternativ können Sie ein lambda auf den gleichen Effekt nutzen:

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

Beachten Sie dies die funktionale Programmierung ist Art und Weise tun. Als Referenz wäre es billiger, ein Listenverständnis zu verwenden:

In [390]: [x ** 2 for x in [1, 2, 3]] 
Out[390]: [1, 4, 9] 
Verwandte Themen