Python >> Tutoriel Python >  >> Python

Comment diviser une chaîne en plusieurs variables plutôt qu'une liste ?

Formulation du problème

Récapitulatif :Le Python string.split(separator) La méthode divise la chaîne à un séparateur donné et renvoie une liste fractionnée de sous-chaînes. Par défaut, il utilise des espaces blancs arbitraires comme séparateur.

Ainsi, si vous souhaitez stocker le résultat dans une variable de liste, vous pouvez simplement le faire :

>>> my_string = 'learn python finxter'
>>> words = my_string.split()
>>> words
['learn', 'python', 'finxter']

Cependant, que se passe-t-il si vous préférez stocker les mots résultants dans des variables individuelles plutôt que de les stocker dans une liste ? En d'autres termes, vous voulez que les trois variables a , b , et c contenir les mots 'learn' , 'python' , et 'finxter' .

Comment diviser une chaîne en plusieurs variables ?

Méthode 1 :Affectation multiple

Python fournit une fonctionnalité appelée affectations multiples (également appelé déballage itérable ) qui permet d'effectuer un n-to-n opération d'affectation en fournissant un itérable de valeurs sur le côté droit de l'opérateur d'affectation = et une combinaison de variables auxquelles les affecter.

Pour affecter le résultat d'un string.split() méthode à plusieurs variables, vous pouvez simplement utiliser des variables séparées par des virgules sur le côté gauche de l'opérateur d'affectation = comme ça :

my_string = 'learn python finxter'
a, b, c = my_string.split()

La sortie est :

print(a)
# learn

print(b)
# python

print(c)
# finxter

Cependant, cette approche ne fonctionne que si split () renvoie le même nombre d'éléments que de variables fournies. Par exemple, l'extrait de code suivant générera un ValueError :

my_string = 'learn python with finxter'
a, b, c = my_string.split()

Sortie :

Traceback (most recent call last):
  File "C:\Users\xcent\Desktop\code.py", line 2, in <module>
    a, b, c = my_string.split()
ValueError: too many values to unpack (expected 3)

Ensuite, vous apprendrez le moyen le plus simple de résoudre ce problème.

Méthode 2 :Fractionner une chaîne avec l'argument maxsplit

Le Python string.split() la méthode fournit un argument facultatif maxsplit qui définit le nombre maximal de fois où la chaîne d'origine est divisée. L'itérable résultant aura jusqu'à maxsplit+1 éléments. Ainsi, si vous avez besoin d'affecter le résultat du fractionnement à n variables utilisant l'affectation multiple sans erreur, vous devez définir maxsplit=n-1 .

my_string = 'learn python with finxter'
a, b, c = my_string.split(maxsplit=2)

print(a)
# learn

print(b)
# python

print(c)
# with finxter

Bien que ce soit le moyen le plus simple et le plus direct d'éviter l'erreur, je vais vous montrer une alternative juste pour le plaisir (et l'apprentissage) ensuite !

Mais d'abord, au cas où vous auriez besoin d'un récapitulatif rapide sur le split() méthode, n'hésitez pas à regarder les quelques secondes suivantes dans cette vidéo explicative :

Méthode 3 : Affectation multiple avec variable à jeter par astérisque *_

Par convention, vous pouvez utiliser le trait de soulignement unique jetable _ comme une variable jetable. Lorsqu'il est combiné avec un astérisque *_ , l'opérateur de décompression, vous pouvez stocker tous les mots inutiles dans la variable de soulignement unique et simplement les ignorer. Si la chaîne n'a que trois mots, ces mots sont stockés dans les variables a , b , c — mais si la chaîne a plus de mots, tous les mots restants sont alors stockés dans _ et aucune erreur ne sera générée !

my_string = 'learn python with finxter'
a, b, *_, c = my_string.split()

Si vous exécutez l'extrait de code avec quatre mots, Python ignore simplement le mot supplémentaire 'with' en le stockant dans la variable jetable.

Sortie :

print(a)
# learn

print(b)
# python

print(c)
# finxter

print(_)
# ['with']

Vous pouvez en savoir plus sur l'opérateur astérisque dans la vidéo suivante :

N'hésitez pas à consulter également notre guide détaillé sur l'opérateur de déballage.