125 votes

Python: Remplacer des valeurs dans la liste

Bonjour Débordement De Pile De La Communauté,

J'ai une liste où je veux remplacer les valeurs avec Aucune condition where() renvoie la valeur True.

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Par exemple, si la condition vérifie bool(article%2) doit retourner:

[None, 1, None, 3, None, 5, None, 7, None, 9, None]

Quel est le moyen le plus efficace pour ce faire?

182voto

John Millikin Points 86775

Le plus efficace:

items = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for index, item in enumerate(items):
    if not (item % 2):
        items[index] = None

Le plus facile à lire:

new_items = [x if x % 2 else None for x in items]

65voto

Laurence Gonsalves Points 50783
ls = [x if (condition) else None for x in ls]

12voto

balpha Points 18387

Voici une autre façon:

>>> L = range (11)
>>> map(lambda x: x if x%2 else None, L)
[None, 1, None, 3, None, 5, None, 7, None, 9, None]

11voto

Alex Martelli Points 330805

Riffs sur un côté de la question posée par les OP dans un commentaire, c'est à dire:

que faire si j'ai eu un générateur qui donne les valeurs de plage(11) au lieu d'un liste. Serait-il possible de remplacer les valeurs dans le générateur?

Bien sûr, c'est trivial...:

def replaceiniter(it, predicate, replacement=None):
  for item in it:
    if predicate(item): yield replacement
    else: yield item

Juste passer n'importe quel itérable (y compris le résultat de l'appel d'un générateur) comme le premier arg, le prédicat de décider si une valeur doit être remplacé en tant que deuxième arg, et laissez - 'er rip.

Par exemple:

>>> list(replaceiniter(xrange(11), lambda x: x%2))
[0, None, 2, None, 4, None, 6, None, 8, None, 10]

2voto

eduffy Points 17061
>>> L = range (11)
>>> [ x if x%2 == 1 else None for x in L ]
[None, 1, None, 3, None, 5, None, 7, None, 9, None]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X