python迭代变量_Python学习-解压可迭代对象赋值给多个变量

解压序列赋值给多个对象

任何的序列(或者是可迭代对象)可以通过一个简单的赋值语句解压并赋值给多个变量。唯一的前提就是变量的数量必须跟序列元素的数量是一样的。

>>> data = ['abcd','a',1,2,(3,4)]

>>> a,b,c,d,e = data

>>> a,b,c,d,e

('abcd', 'a', 1, 2, (3, 4))

>>> a,b,c,d,(e,f) = data

>>> f

4

>>>

这种解压赋值可以用在任何可迭代对象上面,而不仅仅是列表或者元祖。包括字符串,文件对象,迭代器和生成器。

>>> s= 'Hello'

>>> a,b,c,d,e = s

>>> e

'o'

>>>

有时候,你可能只想解压一部分,丢弃其它的值。对于这种情况Python并没有提供特殊的语法。但是你可以使用任意变量名去占位,到时候丢掉这些变量就可以了。

但是你必须保证你选用的那些占位变量名在其它地方没有被使用到。

*星号表达式的用法

如果你想统计一门课程24次考试的平均成绩,需要排除第一次和最后一次的成绩,可以使用星号表达式。

defgrades_avg(grades):

fist,*middle,last =gradesreturn sum(middle)/len(middle)

另外一种情况,假设你现在有一些用户的记录列表,每条记录包含一个名字、邮件,接着就是不确定数量的电话号码。你可以像下面这样分解这些记录:

>>> record = ('Dave', 'dave@example.com', '773-555-1212', '847-555-1212')>>> name,email,*phone_numbers =record>>>name'Dave'

>>>email'dave@example.com'

>>>phone_numbers

['773-555-1212', '847-555-1212']>>>

星号表达式也能用在可迭代对象的开始部分:

>>> a = ('wang','li','zhang','male',30)

>>> *name,sex,age = a

>>> name

['wang', 'li', 'zhang']

>>>

注意:

以上星号表达式解压出来的变量都是列表类型,不管解压的对象是什么类型,这样你使用星号表达式解压出来的对象时就不用做多余的检查它到低是什么类型(永远是list)

值得注意的是:星号表达式在迭代元素为可变长元组的序列时是很有用的。比如

records =[

('foo', 1, 2),

('bar', 'hello'),

('foo', 3, 4),

]defdo_foo(x,y):print('foo',x,y)defdo_bar(s):print('bar',s)for tag,*args inrecords:if tag == 'foo':

do_foo(*args)elif tag == 'bar':

do_bar(*args)

输出:

foo1 2bar hello

foo3 4

星号解压语法在字符串操作的时候也会很有用,比如字符串的分割:

>>> line = 'nobody:*:-2:-2:Unprivileged User:/var/empty:/usr/bin/false'

>>> uname,*fields,homedir,sh = line.split(':')

>>> uname

'nobody'

>>> homedir

'/var/empty'

>>> sh

'/usr/bin/false'

>>>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值