web-dev-qa-db-fra.com

Python, le meilleur moyen de supprimer les caractères d'une chaîne par index

Je supprime un caractère d'une chaîne comme ceci:

S = "abcd"
Index=1 #index of string to remove
ListS = list(S)
ListS.pop(Index)
S = "".join(ListS)
print S
#"acd"

Je suis sûr que c'est pas la meilleure façon de le faire. 

EDIT Je n’ai pas mentionné la nécessité de manipuler une taille de chaîne de longueur ~ 10 ^ 7. Il est donc important de veiller à l'efficacité. 

Est-ce que quelqu'un peut m'aider. Quel moyen pythonique de le faire?

6
Alvaro Joao

Vous pouvez ignorer toutes les opérations de liste avec le découpage en tranches:

S = S[:1] + S[2:]

ou plus généralement

S = S[:Index] + S[Index + 1:]

Vous trouverez de nombreuses réponses à votre question (y compris celles-ci) ici: Comment supprimer un caractère d'une chaîne à l'aide de python . Cependant, cette question concerne en principe la suppression par valeur, pas par index.

18
Mad Physicist

Le découpage en tranches est la meilleure et la plus simple approche à laquelle je puisse penser.

>>> s = 'abcd'
>>> def remove(s, indx):
        return ''.join(x for x in s if s.index(x) != indx)

>>> remove(s, 1)
'acd'
>>> 
>>> 
>>> def remove(s, indx):
        return ''.join(filter(lambda x: s.index(x) != 1, s))

>>> remove(s, 1)
'acd'

N'oubliez pas que l'indexation est basée sur zéro.

3
Iron Fist

Vous pouvez remplacer le caractère d'index par "".

str = "ab1cd1ef"
Index = 3
print(str.replace(str[Index],"",1))
0
min2bro