106 votes

Insérer une chaîne dans la chaîne donnée à l'index donné

Comment insérer du texte dans une chaîne existante ?

Par exemple, supposez que j'ai une chaîne "Nom Âge Groupe Classe Profession". Comment puis-je insérer le troisième mot trois fois de plus avant le quatrième, pour obtenir "Nom Âge Groupe Groupe Groupe Groupe Classe Profession" ?

Je sais comment diviser la chaîne en mots en utilisant .split(), mais ensuite quoi ?

162voto

Ben Avnon Points 1431

Pour l'avenir des 'débutants' qui abordent ce problème, je pense qu'une réponse rapide serait appropriée pour ce fil de discussion.

Comme l'a dit bgporter : les chaînes de caractères Python sont immuables, donc, pour modifier une chaîne de caractères, vous devez utiliser les morceaux que vous avez déjà.

Dans l'exemple suivant, j'insère 'Fu' dans 'Kong Panda', pour créer 'Kong Fu Panda'

>>> ligne = 'Kong Panda'
>>> index = ligne.find('Panda')
>>> ligne_resultat = ligne[:index] + 'Fu ' + ligne[index:]
>>> ligne_resultat
'Kong Fu Panda'

Dans l'exemple ci-dessus, j'ai utilisé la valeur de l'index pour 'découper' la chaîne en 2 sous-chaînes : 1 contenant la sous-chaîne avant l'index d'insertion, et l'autre contenant le reste. Ensuite, j'ajoute simplement la chaîne désirée entre les deux et voilà, nous avons inséré une chaîne dans une autre.

La notation de découpe de Python a une excellente réponse expliquant le sujet de la découpe de chaîne.

155voto

bgporter Points 11119

Un point important qui souvent surprend les nouveaux programmeurs Python, mais que les autres intervenants n'ont pas rendu explicite, c'est que les chaînes de caractères en Python sont immuables - vous ne pouvez jamais les modifier directement.

Il faut vous réhabituer quand vous travaillez avec les chaînes de caractères en Python à au lieu de penser "Comment puis-je modifier cette chaîne?", vous pensez plutôt "comment puis-je créer une nouvelle chaîne qui contient quelques éléments de celle que j'ai déjà obtenue?"

28voto

Sim Mak Points 338

Je sais que c'est mal à propos (puisqu'il utilise la concaténation de chaînes, ce qui n'est pas très efficace), mais à mon avis la manière la plus simple est :

def insert (source_str, insert_str, pos):
    return source_str[:pos] + insert_str + source_str[pos:]

11voto

Michał Niklas Points 15907
line='Nom Âge Groupe Classe Profession'
arr = line.split()
for i in range(3):
    arr.insert(2, arr[2])
print(' '.join(arr))

4voto

Tim Pietzcker Points 146308

Il existe plusieurs façons de faire cela:

Une façon est d'utiliser le slicing:

>>> a="line=Name Age Group Class Profession"
>>> b=a.split()
>>> b[2:2]=[b[2]]*3
>>> b
['line=Name', 'Age', 'Group', 'Group', 'Group', 'Group', 'Class', 'Profession']
>>> a=" ".join(b)
>>> a
'line=Name Age Group Group Group Group Class Profession'

Une autre consiste à utiliser des expressions régulières:

>>> import re
>>> a=re.sub(r"(\S+\s+\S+\s+)(\S+\s+)(.*)", r"\1\2\2\2\2\3", a)
>>> a
'line=Name Age Group Group Group Group Class Profession'

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