Question Y at-il un moyen de sous-chaîne une chaîne en Python?


Y at-il un moyen de sous-chaîne 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 quittez la première partie, cela commence-t-il dès le départ?


1589
2018-03-19 17:29


origine


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 des chaînes. Regarde ici pour une introduction complète.


2409
2018-03-19 17:30



Juste pour être complet car personne d'autre ne l'a mentionné. Le troisième paramètre d'une tranche de tableau est une étape. Donc, inverser une chaîne est aussi simple que:

some_string[::-1]

Ou sélectionner des caractères alternatifs 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 la possibilité de grouper une tranche depuis le début ou la fin.


305
2018-03-20 00:58



Substr () normalement (c'est-à-dire 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 s'attend à commencer et un après END (!). C'est difficile à repérer par les débutants. Donc, le remplacement correct de Substr (s, begin, LENGTH) est

s = s[ beginning : beginning + LENGTH]

91
2017-08-04 11:43



Un moyen commun pour y parvenir est le tronçonnage des chaînes. MyString[a:b] vous donne une sous-chaîne de l'index a à (b - 1)


45
2018-03-02 05:19



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 commun pour créer une copie des types de séquence (pas de chaînes internées). [:] Shallow copie une liste, Voir python-list-slice-used-pour-no-évidence-raison.


17
2018-03-19 18:02



Y at-il un moyen de sous-chaîne 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 réellement si vous affectez, ou lier, le nom,end, à singleton constant, None:

>>> end = None
>>> myString = '1234567890'
>>> myString[2:end]
'34567890'

La notation de tranche a 3 arguments importants:

  • début
  • Arrêtez
  • étape

Leurs défauts lorsqu'ils ne sont pas donnés sont None - mais nous pouvons les transmettre explicitement:

>>> stop = step = None
>>> start = 2
>>> myString[start:stop:step]
'34567890'

Si quitter la deuxième partie signifie «jusqu'à la fin», si vous quittez la première partie, cela commence-t-il dès le départ?

Oui, par exemple:

>>> start = None
>>> stop = 2
>>> myString[start:stop:step]
'12'

Notez que nous incluons le début dans la tranche, mais nous n'allons qu'arrêter.

Quand l'étape est None, par défaut, la tranche utilise 1 pour l'étape. Si vous utilisez un entier négatif, Python est assez intelligent pour aller de la fin au début.

>>> myString[::-1]
'0987654321'

J'explique la notation de tranche dans les moindres détails ma réponse à Expliquer la notation de tranche Question. 


12
2018-06-23 21:53



Vous l'avez juste là sauf pour "fin". C'est ce qu'on appelle la notation de tranche. Votre exemple devrait lire:

new_sub_string = myString[2:]

Si vous omettez le deuxième paramètre, c'est implicitement la fin de la chaîne.


7
2018-03-19 17:31