2017-10-10 5 views
0

suis passé par les postes sur le problème, mais aucun ne m'a aidé à comprendre la question ou de résoudre le problème:L'objet 'int' n'est pas itératif python3?

# This is the definition of the square() function 
def square(lst1): 
    lst2 = [] 
    for num in lst1: 
     lst2.append(num**2) 
    return lst2 

n = [4,3,2,1] 

print(list(map(square, n))) 
>>> 
File "test.py", line 5, in square 
    for num in lst1: 
TypeError: 'int' object is not iterable 

Quel est le problème avec cette ligne dans la définition de la fonction square(), et quelle est la solution? Merci beaucoup!

+0

[Modifier] votre question, ne la complétez pas dans les commentaires. –

+0

maintenant 'square' est trop complexe. 'map' passe 1 entier à la fois. Vous avez besoin de 'def square (n): return n * n' –

+0

Vous n'avez pas besoin de' pour num dans lst1' dans votre fonction. La fonction ne reçoit qu'un seul élément de liste à la fois. Faites juste 'return lst1 ** 2'; il n'est généralement pas utile de retourner des listes à usage unique – WillardSolutions

Répondre

0

map applique square à chaque élément de votre liste. Donc inclure une boucle dans square est redondant. lst1 est déjà un nombre entier lorsque la fonction est appelée.

Ou faire:

result = square(n) 

ou:

result = [i*i for i in n] 

ce dernier est mieux & plus vite que

result = list(map(square,n)) 

avec:

def square(i): 
    return i*i 

+0

Merci! Je me concentre uniquement sur l'utilisation de 'map()' avec la fonction personnalisée comme premier argument. Je ne veux pas mélanger avec des trucs plus fantaisistes en ce moment. – Yifangt