-1
votes

Map renvoyer l'objet de carte et la conversion de la liste en liste supprime tous les éléments de celui-ci

Il suffit d'apprendre que l'objet renvoyé de mappe () code> ne contient pas une fois qu'il a été utilisé dans une expression dans code> ou il a été converti en liste. Qu'est-ce qui cause B code> pour être vidé à la fin? p>

>>> a = [1, 2, 3]
>>> b = map(lambda x: x, a)
>>> b
<map object at 0x104d8ccc0>
>>> list(b)
[1, 2, 3]
>>> list(b)
[]


1 commentaires

Ma faute. Merci pour l'inglightenment. BTW, n'est-ce pas plus naturel mappe renvoyant la même collection (type)? Y a-t-il un mérite en plus de gagner un gain dans la performance de l'itération qui lui est immédiatement?


3 Réponses :


-2
votes

Chaque fois que vous appelez list (b) Vous utilisez l'itérateur dedans, puis effacez la variable B si vous souhaitez stocker B en tant que liste utilisation a = [1, 2, 3] B = Liste (carte (Lambda x: x, a)) Imprimer (B)

[1, 2, 3] Imprimer (* b) 1 2 3 J'espère que cela a aidé.

EDIT: corrigé mon erreur.


1 commentaires

Calling Liste (b) n'attribue à rien.



3
votes

Carte sortira un itérateur qui applique une fonction ( lambda x: x ) sur certains itérateurs ( a ). En conséquence, B est un itérateur. Lorsque vous appelez list (b) pour la première fois, l'itérateur B est appelé plusieurs fois jusqu'à ce qu'il atteigne sa fin. Ensuite, B est un itérateur qui n'a pas d'objet à produire. C'est pourquoi lorsque vous appelez list (b) pour la deuxième fois, il génère une liste vide.


1 commentaires

D'ACCORD. C'est itérateur non démontable que je m'attendais. Bien que cela ne soit pas sûr de son idée de design, c'est tout comme c'est le cas. Merci.



1
votes

the Documentation pour Carte Spécifie qu'il renvoie un "itérateur", pas un "itérateur". Python définit un itérateur à boucle exactement une fois sans répétition ; Une fois que la fin est atteinte, il ne retournera jamais un autre article.

La deuxième exécution de la liste (B) tente de créer une liste d'un itérateur déjà à la fin, il ne renvoie donc aucun élément et une liste vide est construite.


0 commentaires