Question Python: carte en place [dupliquer]


Cette question a déjà une réponse ici:

Je me demandais s'il y avait un moyen de gérer la carte sur quelque chose. Le fonctionnement de la carte prend une forme itérable et applique une fonction à chaque élément de cette liste itérible. Y a-t-il un moyen pour que la carte modifie l'objet itérable lui-même?


14
2018-06-08 19:13


origine


Réponses:


Une affectation de tranche est souvent correcte si vous devez modifier une liste en place

mylist[:] = map(func, mylist)

11
2017-11-10 20:23



Il est assez simple d'écrire:

def inmap(f, x):
    for i, v in enumerate(x):
            x[i] = f(v)

a = range(10)
inmap(lambda x: x**2, a)
print a

3
2018-06-08 19:22



Écrivez simplement le code évident pour le faire.

for i, item in enumerate(sequence):
    sequence[i] = f(item)

1
2018-06-08 19:21



Vous pouvez utiliser une compréhension de liste lambda (ou un def) ou meilleure (si cela est suffisant):

[ do_things_on_iterable for item in iterable ]

Quoi qu’il en soit, vous pouvez vouloir être plus explicite avec une boucle for si les choses deviennent trop complexes.

Par exemple, vous pouvez faire quelque chose comme ça, mais à mon humble avis, c'est moche:

[ mylist.__setitem__(i,thing) for i,thing in enumerate(mylist) ]

1
2018-06-08 19:14