>백엔드 개발 >파이썬 튜토리얼 >Python에서 반복 가능한 객체를 별도의 변수로 분해하는 방법(코드)

Python에서 반복 가능한 객체를 별도의 변수로 분해하는 방법(코드)

不言
不言앞으로
2018-10-11 14:08:352281검색

이 글의 내용은 Python에서 Iterable 객체를 별도의 변수로 분해하는 구현 방법(코드)에 대한 내용입니다. 필요한 친구가 참고할 수 있기를 바랍니다.

1. 요구 사항

이제 N 요소를 포함하는 튜플 또는 시퀀스가 ​​있고 이를 N개의 개별 변수로 분해하려고 합니다.

2. 솔루션

파이썬에서는 간단한 할당 작업을 통해 모든 시퀀스, 튜플 또는 직렬화 가능 객체를 별도의 변수로 분해할 수 있습니다.

유일한 요구사항은 변수의 총 개수와 구조가 순서와 일치해야 한다는 것입니다. 일치하지 않으면 오류가 보고됩니다

예제 표시:

#将序列分解为单独的变量
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)

Result

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

3. Thinking

사실 객체가 반복 가능한 한 이는 단순한 튜플 목록이 아닙니다. 그런 다음 문자열, 파일, 반복자, 생성기를 포함한 분해 작업을 수행할 수 있습니다.

표시 예:

#将序列分解为单独的变量
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(_)

결과:

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

4. 요구사항 업그레이드

직렬화 가능한 객체를 N개 요소로 분해할 수 있다면 N개 요소를 만들어야 합니까? N의 값이 매우 크면 어떻게 될까요?

5. 솔루션 업그레이드

Python의 "*표현식"은 위의 요구 사항을 충족할 수 있습니다. 예를 들어, 성적 목록이 셀 수 없이 많습니다. 이제 첫 번째 성적과 마지막 성적을 제거하고 나머지 성적의 평균을 구하고 싶습니다.

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

Result

grades:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
middle:[1, 2, 3, 4, 5, 6, 7, 8]
去掉第一个和最后一个分数后的平均值:4.5

물론 이 [*식은 ]는 첫 번째 위치, 마지막 위치 또는 다른 위치에 위치할 수 있습니다.

일부 사용자 레코드가 있고 레코드가 이름과 이메일 주소, 그 뒤에 전화번호로 구성되어 있다고 가정합니다.

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

print(name)
print(email)
print(phone_numbers)

실행 결과:

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

6 *표현 기법

*표현이 반복됩니다. 가변 길이 튜플 시퀀스로 작업할 때 특히 유용합니다.

코드:

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)

결과:

foo 1 2
bar hello
foo 3 4

또한 특정 문자열 처리 작업(예: 분할)과 결합할 때도 유용합니다.

코드:

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

uname,*fileds,homedir,sh=line.split(':')
print(uname)
print(homedir)
print(sh)

결과:

아아아아

위 내용은 Python에서 반복 가능한 객체를 별도의 변수로 분해하는 방법(코드)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제