0
votes

Comment supprimer des éléments spécifiques d'une chaîne sans utiliser la méthode Remplacer ()?

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". xxx

Je sais qu'il existe des approches alternatives telles que l'utilisation de la méthode de chaîne appelée remplacer () et je peux exécuter string = string.replace (string [i], "", 1) ou je peux traverser des éléments individuels (pas les indices).

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.


2 commentaires

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 NEUT NE PAS utiliser str.replace () . 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é)


4 Réponses :


0
votes

Utilisez ceci:

string = "1.2.3.4"
res = ""
for s in string: 
    if s != '.': 
        res += s


0 commentaires

0
votes

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) xxx

résultat est 1234

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

une fois que cela se produit, l'exception est capturée et nous quittons simplement la boucle avec notre chaîne finie


0 commentaires

0
votes

Vous pouvez utiliser le module re : xxx


0 commentaires

0
votes

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.

Le problème que vous avez rencontré est causé par plage (len (chaîne)) .See, une fois que la plage est corrigée, elle ne changera pas. Et dans la boucle, chaîne change, il obtient plus courte, et c'est pourquoi vous avez eu une erreur d'interruption.

Donc, ce que vous voulez faire est de suivre la chaîne tout en boucle et utilisez si-ele pour trouver le '.'s, voici un exemple: xxx

toujours, il y a beaucoup de façons de faire face à votre chaîne, ne l'utilisez pas, ça n'est pas bon.


0 commentaires