J'ai le code suivant que j'utilise pour mapper une liste imbriquée en Python pour produire une liste avec la même structure.
>>> nested_list = [['Hello', 'World'], ['Goodbye', 'World']] >>> [map(str.upper, x) for x in nested_list] [['HELLO', 'WORLD'], ['GOODBYE', 'WORLD']]
5 Réponses :
Pour les listes imbriquées, vous pouvez utiliser des compréhensions de liste imbriquée:
nested_list = [[s.upper() for s in xs] for xs in nested_list]
Dans la carte PY3K, une liste doit être appliquée à celle-ci.
carte est certainement un moyen beaucoup plus propre de faire ce que vous voulez. Vous pouvez nier les compréhensions de la liste cependant, c'est peut-être ce que vous êtes après?
Oui, il peut être plus propre à l'aide de la carte mais j'aimerais utiliser un générateur.
D'autres affiches ont donné la réponse, mais chaque fois que je rencontre des difficultés enrouçant ma tête autour d'une construction fonctionnelle, j'avale ma fierté et l'épelez-la de la Longhande avec des méthodes et / ou des objets explicitement non optimaux. Vous avez dit que vous vouliez vous retrouver avec un générateur, donc:
for xs in n_l: def doUpper(l): for x in l: yield x.upper() yield doUpper(xs) for xs in n_l: yield (x.upper() for x in xs) ((x.upper() for x in xs) for xs in n_l)
N'oubliez pas le zen de Python:
Il y a généralement plus d'un - et probablement plusieurs em> - manières évidentes de le faire. ** P> blockQuote>
** Remarque: édité pour la précision. P>
Quoi qu'il en soit, je préfère la carte. P>
from functools import partial nested_list = map( partial(map, str.upper), nested_list )
Wow. Apparemment, ma petite blague sur le zen de Python a vraiment blessé les sentiments de quelqu'un (et donc le bowvote). Alléger, les gens! (FWIW, je suis 100% sincère sur l'utilisation de carte code> dans ce cas.)
"Il devrait y avoir [...]", +1 pour dire la vérité x-)
Voici une solution pour la liste imbriquée qui a une profondeur arbitraire em> forte>: vous voulez en majuscule tout ce que vous listeriez l'élément, juste Tapez p> et plus important, cette fonction récursive peut faire plus que cela! P> Je suis nouveau à Python, n'hésitez pas à discuter! P > p>
Utilisez Ajoutez code> au lieu de
+ = code>, pour éviter de recréer une nouvelle liste pour chaque élément.
@Oannisfilippidis Filippidis Hey Merci de répondre, mais pouvez-vous me donner plus de détails sur le problème avec + =? Je ne comprends pas bien la différence ... (long time no user python ..)
Laissez a = liste () code>. Avec
A.Append (0) code> La même liste code> code> est étendue avec un autre élément. En revanche,
a + = [0] code> crée une nouvelle liste
[0] code> qui est ensuite rejeté de la mémoire. Correction de mon commentaire précédent: Je pensais que
__ iadd __ code> a fonctionné comme
__ ajouter __ code>, mais en utilisant
id code> a révélé que ce n'est pas le cas. Plus de détails peuvent être trouvés ici .
C'est vraiment intelligent!