Maison  >  Article  >  développement back-end  >  Comment décomposer des objets itérables en variables distinctes en Python (code)

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

不言
不言avant
2018-10-11 14:08:352185parcourir

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)

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

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(_)
Résultat :

m
a
r
k
******************************
m
a
r
k

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)))
Résultat

grades:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
middle:[1, 2, 3, 4, 5, 6, 7, 8]
去掉第一个和最后一个分数后的平均值:4.5
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)
Exécutez les résultats :

mark
1782980833@qq.com
['18321859453', '18956245389']

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)
Résultat :

foo 1 2
bar hello
foo 3 4

É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)
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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer