J'essaie de traverser une chaîne à l'aide de ses indices et de supprimer des éléments spécifiques. En raison de la longueur de la chaîne, il est plus court que des éléments sont supprimés, il est toujours hors de portée au moment où l'élément final est atteint.
Voici quelques codes pour ilustrer ce que j'essaie de faire. Par exemple, partir de "1.2.3.4" à "1234". P> Je sais qu'il existe des approches alternatives telles que l'utilisation de la méthode de chaîne appelée Mais comment puis-je le résoudre à l'aide de l'approche ci-dessus (des indices de chaîne traversant)? Quelles techniques puis-je utiliser pour arrêter la boucle après avoir atteint l'élément final de la chaîne? Sans continuer à faire progresser l'index, qui sortez de la plage, car les éléments sont supprimés plus tôt dans la chaîne. P> P> remplacer () code > et je peux exécuter string = string.replace (string [i], "", 1) code> ou je peux traverser des éléments individuels (pas les indices). P>
4 Réponses :
Utilisez ceci:
string = "1.2.3.4"
res = ""
for s in string:
if s != '.':
res += s
Cela pourrait être fait comme ceci (avec un bloc d'essai / sauf), mais ce n'est pas vraiment un excellent moyen d'aborder ce problème (ou tout problème) résultat est Le seul changement réel du cours est qu'en ajoutant un essai / sauf autour de notre boucle, nous nous sauverons de l'indexerror qui se présenterait normalement une fois que nous essayons d'accéder à un élément dans le chaîne qui est maintenant hors limites p> une fois que cela se produit, l'exception est capturée et nous quittons simplement la boucle avec notre chaîne finie p> p> 1234 code> p>
Vous pouvez utiliser le module re code>:
Si je comprends correctement, vous souhaitez modifier une chaîne par son index pendant que la longueur de celle-ci continue de changer.
C'est assez dangereux. P>
Le problème que vous avez rencontré est causé par Donc, ce que vous voulez faire est de suivre la chaîne toujours, il y a beaucoup de façons de faire face à votre chaîne, ne l'utilisez pas, ça n'est pas bon. p> p> plage (len (chaîne)) code> .See, une fois que la plage code> est corrigée, elle ne changera pas. Et dans la boucle, chaîne code> change, il obtient plus courte, et c'est pourquoi vous avez eu une erreur d'interruption. P> code> tout en boucle et utilisez si-ele code> pour trouver le '.'s, voici un exemple: p>
Peut-être une traversée d'ordre inverse aidera-t-elle? Ensuite, les indices ne doivent pas être invalidés que vous modifiez la chaîne d'origine.
À moins que ce soit une sorte de devoirs qui nécessite explicitement cette approche, il existe NO B> NEUT NE PAS utiliser
str.replace () code>. C'est le plus pythonique, le plus facile à lire et à comprendre et je suis assez certain (sans l'avoir chronométré), c'est aussi la solution la plus rapide. Si vous devez absolument utiliser une boucle, optez pour une traversée d'ordre inverse comme suggérée par @NewpyThonUser (vous pouvez également travailler avec incréments conditionnels - seulement incrémenter i si vous ne retirez pas un élément, de cette façon votre index se comportera comme souhaité)