Comment décomposer un objet itérable/séquence en plusieurs variables dans Python

Comment décomposer un objet itérable/séquence en plusieurs variables dans Python
Comment décomposer un objet itérable/séquence en plusieurs variables dans Python

Vous êtes peut-être familier avec le regroupement de variables séparées en objets séquence (list, tuple, str,…) ou itérables (dict, set,…). Par exemple, créer deux variables nommées a et b, puis créer un nouveau tuple t étant égal à (a, b).

Dans cet article, vous apprendrez à faire le contraire, c’est-à-dire décomposer des objets séquence ou itérables en variables multiples.

Comment fonctionne le déballage d’un objet tuple/séquence en Python ?

Python vous permet de décomposer un objet tuple ou une séquence contenant n éléments en n variables. Cela signifie que la référence de chaque élément de l’objet séquence sera associée à une variable séparée.

Comme vous le savez, Python ne stocke pas de valeurs dans les variables. Au lieu de cela, la valeur d’une variable est un identificateur qui indique à l’interpréteur Python où les données associées à cette variable sont stockées en mémoire.

Par conséquent, lorsque nous déballons un objet séquence, tel qu’un tuple, nous assignons la référence/identificateur de chacun des ses éléments à une variable séparée.

Si l’élément courant est une valeur, Python assigne la référence de cette valeur à la variable courante. Si l’élément courant est variable, alors il attribuera l’identifiant qui lui est associé à la variable courante.

Comment décomposer un tuple ou une liste d’objets en Python

Maintenant, démontrons ce dont nous discutons ci-dessus en utilisant l’exemple suivant.

>>> l = [321]
x, y = ( 2, l )

id(2) >>> id(2)
270154000

id(x) >>> id(x)
270154000

id(l) >>> id(l)
60473992

id(y) >>> id(y)
60473992

>>> y[0] = 2

>>> l
[2]

>>>

 

Dans cet exemple, nous avons créé un objet liste l égal à [321], puis nous avons déballé le tuple (2,l) dans les deux variables x et y.

Comme montré dans l’exemple, x a pris l’identifiant de la valeur 2, qui est 270154000. Et, la variable y a pris l’identifiant de l, qui est 60473992.

Puisque 2 est un objet immuable, modifier la valeur de x ne changera pas la valeur de l’objet référencé par l’identifiant 270154000. Au lieu de cela, l’opération créera un nouvel objet.

Cependant, modifier la valeur de la variable y changera la valeur de l’objet référencé par l’identificateur 60473992, comme indiqué dans le code ci-dessus. Ceci est dû au fait que les listes en Python sont des objets mutables.

Comment décomposer d’autres objets itérables en plusieurs variables en Python

Python vous permet de déballer, en variables à l’aide d’une simple instruction d’assignation, tout type d’objet séquence tel que les tuples et les listes.

En général, vous pouvez décomposer n’importe quel objet itérable tel que set, chaînes de caractères, dictionnaires et ainsi de suite.

Décomposer un objet du dictionnaire en plusieurs variables

Lors du déballage d’un objet de dictionnaire, Python assigne tout simplement chaque clé à sa variable associée dans l’opération d’affectation. Par exemple:

>>> x,y={2:6,1:10}

>>> x
2

>>> y
10

Les clés 2 et 1 ont été affectées respectivement à x et y.

Décomposer un objet ensemble en plusieurs variables

Lors du déballage d’un objet ensemble, Python affecte tout simplement chaque élément de l’ensemble à sa variable associée dans l’opération d’affectation. Par exemple:

>>> x,y={2,1}

>>> x
2

>>> y
1

Les éléments 2 et 1 ont été affectées respectivement à x et y.

Décomposer une chaîne de caractères en plusieurs variables

Lors du déballage d’une chaîne de caractères, Python assigne simplement chaque caractère de la chaîne de caractères à sa variable associée dans l’opération d’assignation. Par exemple:

>>> x,y='hi'

>>> x
'h'

>>> y
'i'

>>>

Les caractères “h” et “i” ont été affectés respectivement à x et y.

Notez que le premier caractère est assigné à la première variable et que le deuxième caractère est assigné à la deuxième variable. C’est le même comportement que pour le déballage des objets séquence.

Que faire si le nombre de variables est inférieur à la taille de l’objet itérable/séquence ?

Considérons l’exemple suivant:

>>> a=2

>>> l=[321]

x,y=(a,l)

 

Notez dans cet ‘exemple que le nombre de variables correspond à la taille de l’objet itérable. Donc, si la taille de l’objet itérable est 2, alors vous aurez besoin de 2 variables pour déballer cet objet, et vice versa.

Par contre, si, par exemple, vous utilisez une seule variable au lieu de deux variables, Python soulèvera l’exception ValueError. Python affichera un message avec le type d’exception, qui vous informera qu’il y a une inadéquation concernant le nombre de valeurs à décompresser.

Plus précisément, Python vous dira que la séquence a plus d’éléments que les variables que vous fournissez. Voici un exemple qui illustre ça.

>>> a,b=(2,3,5)

Enquête de retraçage (dernier appel en date) :
Fichier "<console>", ligne 1, dans <module>.
ValueError : trop de valeurs à déballer (attendu 2)

Que va faire Python si vous utilisez une variable plusieurs fois dans l’instruction d’affectation?

Lorsque vous déballez un objet itérable, vous pouvez parfois, par erreur, utiliser la même variable plusieurs fois. Alors, comment Python va se comporter dans une telle situation?

Pour répondre à cette question, considérons cet exemple :

>>> a, b, a = (2,3,4)

>>> a
4

Comme vous pouvez le constater, nous avons utilisé la variable “a” deux fois dans cette liste. En plus, la variable a conservé tout simplement la dernière valeur qui lui a été assignée, qui est 4 dans ce cas.

Que faire lorsque le nombre de variables est inférieur à la taille de l’itérable/séquence à décomposer?

Dans de telles situations, vous pouvez extraire la valeur du premier élément, du dernier élément ou les valeurs des ces deux éléments de l’objet séquence. De plus, vous pouvez extraire tous les éléments sauf le premier, le dernier ou les deux.

Ce sont les seuls cas où vous pouvez décompresser un objet de séquence en plusieurs variables, et le nombre de variables est inférieur à la taille de l’objet déballé.

Note : Cette idée a un sens si vous n’avez affaire qu’à un objet séquence. Pour un objet non séquentiel comme un objet dictionnaire, le concept de premier/dernier élément n’est pas logique. Par conséquent, parler du dernier/du premier élément n’a pas de sens comme vous pouvez le voir dans les exemples ci-dessous.

Comment décompresser le premier élément d’un objet séquence (list, tuple, str)

Pour extraire le premier élément d’un objet de séquence, nous utilisons deux variables. La première stocke l’élément dans la tête de l’objet et la seconde stocke les éléments restants dans l’objet, comme indiqué dans l’exemple ci-dessous:

a,*b=[2,5,9,9,6,9,9,8]

>>> a
2

>>> b
[5, 9, 6, 9, 8]

>>>

 

La variable “a” a la valeur du premier élément de la liste et la variable “b” mémorise tous les éléments de la liste à l’exception de l’élément en tête.

Comment décomposer le dernier élément d’un séquence

Pour extraire le dernier élément d’un objet séquence, nous utilisons deux variables. La première stocke les éléments depuis le début de l’objet jusqu’à l’élément avant sa fin, et la seconde stocke le dernier élément dans l’objet, comme illustré dans l’exemple ci-dessous:

*b,a=[2,5,9,9,6,9,9,8]

>>> a
8

>>> b
[2, 5, 9, 6, 9]

>>>

 

La variable “a” a la valeur du dernier élément de la liste et la variable “b” mémorise tous les éléments de la liste à l’exception de l’élément en fin de liste.

Comment décomposer les éléments entre le premier et le dernier élément d’un objet de séquence

Tout d’abord, vous pouvez utiliser le code de cette section pour extraire également le premier/dernier élément est un objet séquence.

Pour extraire les éléments entre le premier et le dernier élément d’un objet séquence, exclusivement, nous utilisons trois variables.

La première stocke l’élément dans la tête de l’objet, la deuxième stocke les éléments entre le début et la fin de l’objet, exclusivement, et la troisième variable stocke le dernier élément dans l’objet, comme indiqué dans l’exemple ci-dessous:

a,*b,c=[2,5,9,9,6,9,9,8]

>>> a
2

>>> b
[5, 9, 6, 9]

>>> c
8

>>> 

La variable “a” a la valeur du premier élément de la liste, la variable “c” a la valeur du dernier élément, la variable “b” mémorise tous les éléments de la liste, sauf les éléments en tête et en queue de liste.

Pour terminer, vous pouvez utiliser les techniques ci-dessus si vous connaissez l’emplacement des champs que vous voulez déballer, et en même temps, vous ne connaissez pas la taille de l’objet séquence.

LAISSER UN COMMENTAIRE

Please enter your comment!
Please enter your name here