pas de methode insertAt pour les chaines ?

Le
Tool69
Salut,

voilà, j'ai besoin d'insérer une chaine dans une autre à une position
donnée,
je suis étonné de ne pas trouver cela dans le module string, j'ai donc
écris une
fonction comme ci-dessous en utilisant les slices (serait-ce mieux
avec des listes ?),
mais pouvez-vous me confirmer qu'il n'existe pas de telle fonction 'de
base' ?

def insert(original, inserted, pos):
'''Insert inserted in original at the given pos

If pos > len(original), complete original string
whith whitespaces.
'''
diff = pos - len(original)
if diff > 0 : # on doit placer des espaces
original += " "*(diff)
return original[:pos] + inserted + original[pos:]

Merci, a plus :
Kib²
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Laurent Pointal
Le #605688
Salut,

voilà, j'ai besoin d'insérer une chaine dans une autre à une position
donnée,
je suis étonné de ne pas trouver cela dans le module string, j'ai donc
écris une
fonction comme ci-dessous en utilisant les slices (serait-ce mieux
avec des listes ?),
mais pouvez-vous me confirmer qu'il n'existe pas de telle fonction 'de
base' ?

def insert(original, inserted, pos):
'''Insert inserted in original at the given pos

If pos > len(original), complete original string
whith whitespaces.
'''
diff = pos - len(original)
if diff > 0 : # on doit placer des espaces
original += " "*(diff)
return original[:pos] + inserted + original[pos:]

Merci, a plus :
Kib²



Il n'existe aucune fonction/méthode de base pour modifier une chaîne.
Elles sont "immutables", une fois créées on ne peut pas les modifier sur
place.

Donc, ta façon de faire est la bonne.

Pour info:
http://www.python.org/doc/faq/general/#why-are-python-strings-immutable

Tool69
Le #600232
On 4 avr, 11:52, Laurent Pointal



Salut,

voilà, j'ai besoin d'insérer une chaine dans une autre à une posi tion
donnée,
je suis étonné de ne pas trouver cela dans le module string, j'ai d onc
écris une
fonction comme ci-dessous en utilisant les slices (serait-ce mieux
avec des listes ?),
mais pouvez-vous me confirmer qu'il n'existe pas de telle fonction 'de
base' ?

def insert(original, inserted, pos):
'''Insert inserted in original at the given pos

If pos > len(original), complete original string
whith whitespaces.
'''
diff = pos - len(original)
if diff > 0 : # on doit placer des espaces
original += " "*(diff)
return original[:pos] + inserted + original[pos:]

Merci, a plus :
Kib²


Il n'existe aucune fonction/méthode de base pour modifier une chaîne.
Elles sont "immutables", une fois créées on ne peut pas les modifier sur
place.

Donc, ta façon de faire est la bonne.

Pour info:http://www.python.org/doc/faq/general/#why-are-python-strings-i mmutable


Merci Laurent,

je savais que les chaîne étaient immutables, donc qu'on ne peut pas
les modifier sans créer une nouvelle instance.
Cependant j'esperai qu'une telle fonction soit déjà présente quelque
part dans un module.

A bientôt,
Kib²


MC
Le #600229
Bonjour !

Tu peux faire l'économie du test :

def insert2(original, inserted, pos):
original += " "*(pos - len(original))
return original[:pos] + inserted + original[pos:]







--
@-salutations

Michel Claveau
MC
Le #600228
Et, comme l'ajout d'espaces n'a lieu qu'au début :

def insert3(original, inserted, pos):
return(original+"
"*(pos-len(original)))[:pos]+inserted+original[pos:]






--
@-salutations

Michel Claveau
Maric Michaud
Le #600225
Tool69 wrote:

voilà, j'ai besoin d'insérer une chaine dans une autre à une position
donnée,


On insère pas de chaînes en python, on en produit de nouvelles.

je suis étonné de ne pas trouver cela dans le module string, j'ai donc
écris une


Le module string ne doit pas être utilisé, les méthodes du type str sont
plus optimisées.

fonction comme ci-dessous en utilisant les slices (serait-ce mieux
avec des listes ?),
mais pouvez-vous me confirmer qu'il n'existe pas de telle fonction 'de
base' ?



Non cela n'existe pas, mais c'est une opération de formatage de chaîne assez
élémentaire, on pourrait écrire cette fonction de la façon suivante (c'est
pas forcément plus clair, mais c'est juste pour dire qu'on peut le faire en
une seule expression) :

insertat = lambda s1, s2, pos : ("%-" + str(pos) + "s%s%s") %(s1[:pos],
s2, s1[pos:])



insertat("toto", "12", 0)
'12toto'



insertat("toto", "12", 2)
'to12to'



insertat("toto", "12", 4)
'toto12'



insertat("toto", "12", 5)
'toto 12'



insertat("toto", "12", 10)
'toto 12'





--
Maric Michaud
_____________



MC
Le #605287
Bonjour !

Je ne voudrais l'air de critiquer, mais, dans le'exemple cité, je ne
vois pas bien l'intérêt de la lambda, relativement à ça :

def insertat(s1,s2,pos): return("%-" + str(pos) + "s%s%s") %(s1[:pos],
s2, s1[pos:])

insertat("toto", "12", 0)
...








--
@-salutations

Michel Claveau
Maric Michaud
Le #600971
MC wrote:

Bonjour !


Bonjour,

Je ne voudrais l'air de critiquer, mais, dans le'exemple cité, je ne
vois pas bien l'intérêt de la lambda, relativement à ça :

def insertat(s1,s2,pos): return("%-" + str(pos) + "s%s%s") %(s1[:pos],
s2, s1[pos:])

insertat("toto", "12", 0)


Il n'y en a pas, c'est juste pour dire que ça se fait en une seule
expression, et donc, qu'à la limite il n'y a pas vraiment besoin de
fonction non plus (à moins de le faire vraiment très souvent, ce dont je
doute un peu).


--
Maric Michaud - www.aristote.info

Publicité
Poster une réponse
Anonyme