Parcours
/
Python
Python
/
Programme
/
Chaînes de caractères
Ch

Chaînes de caractères en Python

83 exercices

À propos de Chaînes de caractères

En Python, une str est une séquence immuable de points de code Unicode. Elle peut contenir des lettres, des signes diacritiques, des caractères de positionnement, des nombres, des symboles monétaires, des emoji, de la ponctuation, des espaces et des caractères de saut de ligne, et bien plus encore.

Pour une analyse approfondie de l'information qu'une string encode (ou, « comment un ordinateur sait-il traduire des zéros et des uns en lettres ? »), cet article de blog reste une aide précieuse. La documentation Python fournit également un HOWTO unicode très détaillé qui traite de la prise en charge de la spécification Unicode par Python dans les modules str, bytes et re, des considérations liées aux locales, et de quelques problèmes courants d'encodage et de traduction.

Les strings implémentent toutes les opérations communes aux séquences et peuvent être parcourues avec la syntaxe for item in <str> ou for index, item in enumerate(<str>). Chaque point de code (strings de longueur 1) peut être référencé par un numéro d'indice 0-based index à partir de la gauche, ou -1-based index à partir de la droite.

Les strings peuvent être concaténées avec <str> + <other str> ou <str>.join(<iterable>), et découpées via <str>.split(<separator>). Elles offrent aussi de nombreuses autres options de formatage, d'assemblage et de gabarits.

Un littéral str peut être déclaré avec des guillemets simples ' ou doubles ". Le caractère d'échappement \ est disponible si nécessaire.


>>> single_quoted = 'These allow "double quoting" without "escape" characters.'

>>> double_quoted = "These allow embedded 'single quoting', so you don't have to use an 'escape' character."

Les strings multilignes se déclarent avec ''' ou """.

>>> triple_quoted = '''Three single quotes or "double quotes" in a row allow for multi-line string literals.
  Line break characters, tabs and other whitespace is fully supported. Remember - The escape "\" character is also available if needed (as can be seen below). 
  
  You\'ll most often encounter multi-line strings as "doc strings" or "doc tests" written just below the first line of a function or class definition.
    They\'re often used with auto documentation ✍ tools.
    '''

Le constructeur str(<object>) permet de créer et de convertir des strings à partir d'autres objets :

>>> my_number = 42
>>> str(my_number)
...
"42"

Bien que le constructeur str(<object>) puisse servir à convertir des strings, il n'itérera pas sur un objet et ne le déballera pas. Cela diffère du comportement des constructeurs d'autres types de données comme list(), set(), dict() ou tuple(), et peut donner des résultats surprenants.

>>> numbers = [1,3,5,7]
>>> str(numbers)
...
'[1,3,5,7]'

Les points de code d'une str peuvent être référencés par un numéro d'indice 0-based index à partir de la gauche :

creative = '창의적인'

>>> creative[0]
'창'

>>> creative[2]
'적'

>>> creative[3]
'인'

L'indexation fonctionne aussi depuis la droite, en commençant par un numéro -1-based index :

creative = '창의적인'

>>> creative[-4]
'창'

>>> creative[-2]
'적'

>>> creative[-1]
'인'

Il n'existe pas de type « caractère » ou « rune » distinct en Python, donc indexer une string produit une nouvelle str de longueur 1 :


>>> website = "exercism"
>>> type(website[0])
<class 'str'>

>>> len(website[0])
1

>>> website[0] == website[0:1] == 'e'
True

Des portions de string peuvent être sélectionnées via la notation de tranche, en utilisant <str>[<start>:<stop>:<step>] pour produire une nouvelle string. Le résultat exclut l'indice stop. Si aucun start n'est donné, l'indice de départ vaut 0. Si aucun stop n'est donné, l'indice stop correspond à la fin de la string.

moon_and_stars = '🌟🌟🌙🌟🌟⭐'

>>> moon_and_stars[1:4]
'🌟🌙🌟'

>>> moon_and_stars[:3]
'🌟🌟🌙'

>>> moon_and_stars[3:]
'🌟🌟⭐'

>>> moon_and_stars[:-1]
'🌟🌟🌙🌟🌟'

>>> moon_and_stars[:-3]
'🌟🌟🌙'

On peut aussi découper une string en portions plus petites via <str>.split(<separator>), qui renvoie une list de portions. Utiliser <str>.split() sans aucun argument découpe la string sur les espaces blancs.

>>> cat_ipsum = "Destroy house in 5 seconds command the hooman."
>>> cat_ipsum.split()
...
['Destroy', 'house', 'in', '5', 'seconds', 'command', 'the', 'hooman.']


>>> cat_words = "feline, four-footed, ferocious, furry"
>>> cat_words.split(',')
...
['feline', ' four-footed', ' ferocious', ' furry']


>>> colors = """red,
orange,
green,
purple,
yellow"""

>>> colors.split(',\n')
['red', 'orange', 'green', 'purple', 'yellow']

Les strings peuvent être concaténées avec l'opérateur +. Cette méthode est à utiliser avec parcimonie, car elle n'est ni très performante ni facile à maintenir.

language = "Ukrainian"
number = "nine"
word = "дев'ять"

sentence = word + " " + "means" + " " + number + " in " + language + "."

>>> print(sentence)
...
"дев'ять means nine in Ukrainian."

Si une list, un tuple, un set ou une autre collection de strings individuelles doit être combinée en une seule str, <str>.join(<iterable>) est une meilleure option :

# str.join() makes a new string from the iterables elements.
>>> chickens = ["hen", "egg", "rooster"] # Lists are iterable.
>>> ' '.join(chickens)
'hen egg rooster'

# Any string can be used as the joining element.
>>> ' :: '.join(chickens)
'hen :: egg :: rooster'

>>> ' 🌿 '.join(chickens)
'hen 🌿 egg 🌿 rooster'


# Any iterable can be used as input.
>>> flowers = ("rose", "daisy", "carnation")  # Tuples are iterable.
>>> '*-*'.join(flowers)
'rose*-*daisy*-*carnation'

>>> flowers = {"rose", "daisy", "carnation"}  # Sets are iterable, but output order is not guaranteed.
>>> '*-*'.join(flowers)
'rose*-*carnation*-*daisy'

>>> phrase = "This is my string"  # Strings are iterable, but be careful!
>>> '..'.join(phrase)
'T..h..i..s.. ..i..s.. ..m..y.. ..s..t..r..i..n..g'


# Separators are inserted **between** elements, but can be any string (including spaces).
# This can be exploited for interesting effects.
>>> under_words = ['under', 'current', 'sea', 'pin', 'dog', 'lay']
>>> separator = ' ⤴️ under' # Note the leading space, but no trailing space.
>>> separator.join(under_words)
'under ⤴️ undercurrent ⤴️ undersea ⤴️ underpin ⤴️ underdog ⤴️ underlay'

# The separator can be composed different ways, as long as the result is a string.
>>> upper_words = ['upper', 'crust', 'case', 'classmen', 'most', 'cut']
>>> separator = ' 🌟 ' + upper_words[0] # This becomes one string, similar to ' ⤴️ under'.
>>> separator.join(upper_words)
 'upper 🌟 uppercrust 🌟 uppercase 🌟 upperclassmen 🌟 uppermost 🌟 uppercut'

Les strings prennent en charge toutes les opérations communes aux séquences. Chaque point de code peut être parcouru dans une boucle via for item in <str>. On peut parcourir les indices avec les éléments dans une boucle via for index, item in enumerate(<str>).


>>> exercise = 'လေ့ကျင့်'

# Note that there are more code points than perceived glyphs or characters.
# Care should be used when iterating over languages that use
# combining characters, or when dealing with emoji.
>>> for code_point in exercise:
...    print(code_point)
...
လ
ေ
့
က
ျ
င
်
့

# Using enumerate will give both the value and index position of each element.
>>> for index, code_point in enumerate(exercise):
...    print(index, ": ", code_point)
...
0 :  လ
1 :  ေ
2 :  ့
3 :  က
4 :  ျ
5 :  င
6 :  ်
7 :  ့

Méthodes de string

Python fournit un riche ensemble de méthodes de string qui aident à la recherche, au nettoyage, au découpage, à la transformation, à la traduction et à bien d'autres opérations. Un éventail de ces méthodes est présenté dans un autre exercice.

Formatage

Python fournit aussi un riche ensemble d'outils de formatage et de gabarits de strings, ainsi qu'un traitement de texte plus poussé via les modules re (expressions régulières), difflib (comparaison de séquences) et textwrap. Pour une excellente introduction au formatage de strings en Python, voir cet article sur Real Python. Pour une introduction aux méthodes de string, voir Strings and Character Data in Python sur le même site.

Types et encodages associés

En plus de str (une séquence texte), Python dispose de types de séquences binaires correspondants, résumés dans services de données binaires : bytes (une séquence binaire), bytearray et memoryview, pour le stockage et la manipulation efficaces de données binaires. De plus, les flux permettent d'envoyer et de recevoir des données binaires sur une connexion réseau sans utiliser de fonctions de rappel.

Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet

Apprends Chaînes de caractères

L'entraînement est verrouillé

Déverrouille 4 exercices de plus pour t'entraîner sur Chaînes de caractères