Comment décomposer des objets itérables en variables distinctes en Python (code)

不言
Libérer: 2018-10-11 14:09:43
avant
2266 Les gens l'ont consulté

Ce que cet article vous apporte concerne la méthode d'implémentation (code) de décomposition d'objets itérables en variables distinctes en Python. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. aide.

1. Exigences

Vous avez maintenant un tuple ou une séquence contenant N éléments, et vous souhaitez maintenant le décomposer en N variables distinctes.

2. Solution

En python, toute séquence, tuple ou objet sérialisable peut être décomposé en objets séparés via une simple variable d'opération d'affectation.

La seule exigence est que le nombre total et la structure des variables doivent correspondre à la séquence. Si cela ne correspond pas, une erreur sera signalée

Exemple d'affichage :

#将序列分解为单独的变量
m=(1,2)
x,y=m
print("x=",x)
print("y=",y)

print("*"*30)

data=["mark",18,"超级帅",(1992,5,4)]
name,age,feature,birthday=data
print("name=",name)
print("age=",age)
print("feature=",feature)
print("birthday=",birthday)
print("*"*30)


name,age,feature,(year,mon,day)=data
print("name=",name)
print("age=",age)
print("feature=",feature)
print("year=",year)
print("mon=",mon)
print("day=",day)
Copier après la connexion

Résultat

x= 1
y= 2
******************************
name= mark
age= 18
feature= 超级帅
birthday= (1992, 5, 4)
******************************
name= mark
age= 18
feature= 超级帅
year= 1992
mon= 5
day= 4
Copier après la connexion

Réflexion

Réel Ce n'est pas seulement une liste de tuples. Tant que l'objet est itérable, vous pouvez effectuer des opérations de décomposition, y compris des chaînes, des fichiers, des itérateurs et des générateurs.

Exemple d'affichage :

#将序列分解为单独的变量
mark="mark"
m,a,r,k=mark
print(m)
print(a)
print(r)
print(k)
print("*"*30)

#有时候我们想丢弃某个值,单由于变量数量必须和要分解的对象的可分解数量相同,此时我们可以使用_来表示要丢弃的值。

mark="mark"
m,a,r,_=mark
print(m)
print(a)
print(r)
#其实_还是一个变量,指示看起来舒服点
print(_)
Copier après la connexion
Résultat :

m
a
r
k
******************************
m
a
r
k
Copier après la connexion

4. Mise à niveau des exigences

Si l'objet du numéro de série est disponible Il peut être décomposé en N éléments. Devons-nous créer N éléments ? Et si la valeur de N est très grande ?

5. Mise à niveau de la solution

L'"*expression" en Python peut répondre aux besoins ci-dessus. Par exemple, il existe d'innombrables listes de notes : notes. Maintenant, je veux supprimer la première note et la dernière note, puis trouver la moyenne des notes restantes :

Code

import numpy as np

grades=list(range(10))#定义一个0-999的分数列表
print("grades:"+str(grades))
first,*middle,last=grades
print("middle:"+str(middle))
print("去掉第一个和最后一个分数后的平均值:"+str(np.mean(middle)))
Copier après la connexion
Résultat

grades:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
middle:[1, 2, 3, 4, 5, 6, 7, 8]
去掉第一个和最后一个分数后的平均值:4.5
Copier après la connexion
Bien sûr, cette [*expression] peut être à la première position, à la dernière position, ou à d'autres positions.

Supposons qu'il existe des enregistrements d'utilisateurs. Les enregistrements sont constitués de noms et d'adresses e-mail, suivis d'un nombre quelconque de numéros de téléphone :

record=('mark','1782980833@qq.com','18321859453','18956245389')
name,email,*phone_numbers=record

print(name)
print(email)
print(phone_numbers)
Copier après la connexion
Exécutez les résultats :

mark
1782980833@qq.com
['18321859453', '18956245389']
Copier après la connexion

6. *Compétences d'expression

*Les expressions sont particulièrement utiles lors de l'itération sur une séquence de tuples de longueur variable

Code :

records=[
    ('foo',1,2),
    ('bar','hello'),
    ('foo',3,4),
]

def do_foo(x,y):
    print('foo',x,y)

def do_bar(s):
    print('bar',s)

for tag,*args in records:
    if tag=='foo':
        do_foo(*args)
    elif tag=='bar':
        do_bar(*args)
Copier après la connexion
Résultat :

foo 1 2
bar hello
foo 3 4
Copier après la connexion

Également utile lorsqu'il est combiné avec certaines opérations de traitement de chaînes (comme le fractionnement)

Code :

line='nobody:*:-2:-2:unp user:/var/empty:/user/nim/false'

uname,*fileds,homedir,sh=line.split(':')
print(uname)
print(homedir)
print(sh)
Copier après la connexion
Résultat :

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:segmentfault.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal