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?

1656
demandé sur Robert Harvey 2009-03-19 20:29:41

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.

2508
répondu Paolo Bergantino 2017-05-23 12:34:51

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.

314
répondu Endophage 2014-05-05 16:58:56

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]
95
répondu Michał Leon 2018-06-22 15:24:49

un moyen courant d'y parvenir est le tranchage de cordes. MyString[a:b] vous donne une soustraction de l'index A à (b - 1)

45
répondu codingscientist 2016-06-16 21:55:23

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 .

16
répondu gimel 2017-05-23 12:02:48

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.

14
répondu Aaron Hall 2017-09-30 02:00:07

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.

7
répondu bouvard 2018-06-22 15:23:28

je voudrais ajouter deux points à la discussion:

  1. 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]
    
  2. Python a tranche les objets:

    idx = slice(2, None)
    'abcde'[idx] == 'abcde'[2:] == 'cde'
    
6
répondu ostrokach 2016-12-30 22:36:32

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]
 ' '
2
répondu Rudi Uhl 2015-03-18 12:01:43

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é.

0
répondu levi 2018-06-22 15:26:57