Y a-t-il un moyen de soustraire une chaîne en Python?
y a-t-il un moyen de soustraire une chaîne en Python, pour obtenir une nouvelle chaîne du 3ème caractère à la fin de la chaîne?
peut-être comme myString[2:end]
?
si quitter la deuxième partie signifie "jusqu'à la fin", si vous laissez la première partie, est-ce qu'elle commence dès le début?
10 réponses
>>> x = "Hello World!"
>>> x[2:]
'llo World!'
>>> x[:2]
'He'
>>> x[:-2]
'Hello Worl'
>>> x[-2:]
'd!'
>>> x[2:-2]
'llo Worl'
Python appelle ce concept "slicing" et il fonctionne sur plus que de simples cordes. Jetez un oeil ici pour une introduction complète.
juste pour être complet comme personne d'autre ne l'a mentionné. Le troisième paramètre d'une tranche de tableau est un pas. Donc inverser une chaîne de caractères est aussi simple que:
some_string[::-1]
ou en sélectionnant d'autres caractères serait:
"H-e-l-l-o- -W-o-r-l-d"[::2] # outputs "Hello World"
la possibilité de faire un pas en avant et en arrière à travers la chaîne maintient la cohérence avec le fait d'être capable d'étaler les tranches du début ou de la fin.
Substr() normalement (c'est à dire de PHP et Perl) fonctionne de cette façon:
s = Substr(s, beginning, LENGTH)
donc les paramètres sont beginning
et LENGTH
.
mais le comportement de Python est différent; il attend le début et un après la fin (!). C'est difficile à repérer par les débutants. donc le remplacement correct pour Substr (S, début, longueur) est
s = s[ beginning : beginning + LENGTH]
un moyen courant d'y parvenir est le tranchage de cordes. MyString[a:b]
vous donne une soustraction de l'index A à (b - 1)
un exemple semble manquer ici: copie complète (superficielle).
>>> x = "Hello World!"
>>> x
'Hello World!'
>>> x[:]
'Hello World!'
>>> x==x[:]
True
>>>
c'est un idiome courant pour créer une copie de types de séquences (pas de chaînes internes). [:]
Superficielle des copies d'une liste, Voir python-liste-tranche-utilisé-pour-pas-évident-raison .
y a-t-il un moyen de soustraire une chaîne en Python, pour obtenir une nouvelle chaîne du 3ème caractère à la fin de la chaîne?
peut-être comme
myString[2:end]
?
Oui, cela fonctionne si vous assignez, ou lier , le nom, end
, constante singleton, None
:
>>> end = None
>>> myString = '1234567890'
>>> myString[2:end]
'34567890'
Slice notation a 3 arguments importants:
- démarrer
- stop
- étape
leurs valeurs par défaut sont None
- mais nous pouvons les passer explicitement:
>>> stop = step = None
>>> start = 2
>>> myString[start:stop:step]
'34567890'
si quitter la deuxième partie signifie "jusqu'à la fin", si vous laissez la première partie, est-ce qu'elle commence dès le début?
Oui, par exemple:
>>> start = None
>>> stop = 2
>>> myString[start:stop:step]
'12'
Notez que nous incluons start dans la tranche, mais nous allons Seulement jusqu'à, et pas y compris, stop.
quand step est None
, par défaut la tranche utilise 1
pour le step. Si vous marchez avec un entier négatif, Python est assez intelligent pour aller de la fin au début.
>>> myString[::-1]
'0987654321'
j'explique la notation des tranches en détail dans ma réponse pour expliquer la question de notation des tranches.
vous l'avez là, sauf "end". Ça s'appelle la notation des tranches. Votre exemple doit se lire:
new_sub_string = myString[2:]
si vous omettez le second paramètre, c'est implicitement la fin de la chaîne.
je voudrais ajouter deux points à la discussion:
-
vous pouvez utiliser
None
à la place sur un espace vide pour spécifier "du début" ou "à la fin":'abcde'[2:None] == 'abcde'[2:] == 'cde'
ceci est particulièrement utile dans les fonctions, où vous ne pouvez pas fournir un espace vide comme argument:
def substring(s, start, end): """Remove `start` characters from the beginning and `end` characters from the end of string `s`. Examples -------- >>> substring('abcde', 0, 3) 'abc' >>> substring('abcde', 1, None) 'bcde' """ return s[start:end]
-
Python a tranche les objets:
idx = slice(2, None) 'abcde'[idx] == 'abcde'[2:] == 'cde'
peut-être que je l'ai manqué, mais je n'ai pas pu trouver une réponse complète sur cette page à la(aux) question (s) originale (s) parce que les variables ne sont pas davantage discutées ici. Alors j'ai dû aller sur la recherche.
puisque je n'ai pas encore le droit de commenter, permettez-moi d'ajouter ma conclusion ici. Je suis sûr que je n'étais pas le seul intéressé par elle en accédant à cette page:
>>>myString = 'Hello World'
>>>end = 5
>>>myString[2:end]
'llo'
si vous quittez la première partie, vous obtenez
>>>myString[:end]
'Hello'
et si vous à gauche : dans le milieu ainsi vous avez obtenu le plus simple sous-chaîne, ce qui serait le 5e caractère (compter à partir de 0, c'est donc le vide dans ce cas):
>>>myString[end]
' '
L'utilisation d'indices codés en dur elle-même peut être un gâchis.
pour éviter cela, Python propose un objet intégré slice()
.
string = "my company has 1000$ on profit, but I lost 500$ gambling."
si on veut savoir combien d'argent il me reste.
solution normale:
final = int(string[15:19]) - int(string[43:46])
print(final)
>>>500
en utilisant des tranches:
EARNINGS = slice(15, 19)
LOSSES = slice(43, 46)
final = int(string[EARNINGS]) - int(string[LOSSES])
print(final)
>>>500
en utilisant slice vous gagnez la lisibilité.