Le remplacement d'un élément dans une liste python par index.. à défaut?
Aucune idée pourquoi quand je l'appelle:
>>> hi = [1, 2]
>>> hi[1]=3
>>> print hi
[1, 3]
Je peux mettre à jour un élément de la liste par son index, mais quand je l'appelle:
>>> phrase = "hello"
>>> for item in "123":
>>> list(phrase)[int(item)] = list(phrase)[int(item)].upper()
>>> print phrase
hello
Il échoue?
Devrait être hELLo
OriginalL'auteur Jamus | 2013-06-04
Vous devez vous connecter pour publier un commentaire.
Vous n'avez pas initialisé
phrase
(Lelist
vous avaient l'intention de faire) dans une variable encore. Donc à peu près vous avez créé une liste dans chaque boucle, étant exactement la même.Si vous avez été l'intention de réellement changer les caractères de
phrase
, ce n'est pas possible, comme en python, les chaînes sont immuables.Peut-être faire
phraselist = list(phrase)
, puis modifier la liste dans la boucle for. Aussi, vous pouvez utiliserrange()
:Merci :).
OriginalL'auteur TerryA
Si vous préférez one-liner:
list(phrase)
Merci. Copier-coller les restes de l'OP code. Supprimé.
OriginalL'auteur Mike Müller
Une autre réponse, juste pour le fun 🙂
Pour faire de ce solide, j'ai créé une méthode: (parce que je suis génial, et je m'ennuie)
tu as bien fait... (quoi, pas de +1 ?) 🙂
Hmm... je ne sais pas... Il a l'air terriblement non-pythonic...
Qu'est-ce exactement "non-pythonic" ?
Venir à chou chat :3
OriginalL'auteur Inbar Rose
considérer que les chaînes sont immuables en python que Vous ne pouvez pas modifier la chaîne existante pouvez créer de nouveaux.
''.join([c if i not in (1, 2, 3) else c.upper() for i, c in enumerate(phrase)])
OriginalL'auteur oleg
list()
crée un nouveau liste. Votre boucle crée instantanément et se défausse de deux nouvelles listes à chaque itération. Vous pouvez l'écrire comme:Ou sans liste:
Les chaînes sont immuables en Python donc pour le modifier, vous devez créer une nouvelle chaîne.
Ou si vous êtes aux prises avec bytestrings, vous pouvez utiliser
bytearray
qui est mutable:Si les indices ne sont pas consécutifs; vous pourriez utiliser explicite d'une boucle for:
OriginalL'auteur jfs