Python 数据解析 1---- 赋值语句 序列解包

序列解包要求等号左侧的变量数量与序列中的元素数量一样多。请注意,多重赋值实际上只是元组打包和序列拆包的组合。如果变量个数和序列元素的个数不匹配,会抛出ValueError异常。

对应匹配赋值:

features = ['5', 'boy', 'student']
age, gender, identity = features  # age = '5' gender = 'boy'  identity ='student'

a,c=features         # ValueError: too many values to unpack
a,b,c,d,e=features   # ValueError: need more than 3 values to unpack

a,b,c={1,2,3}      # a=1,b=2,c=3
a,b,c,d,e='hello'  # a='h',b='e',c='l',d='l', e='o' 左边值必须和右边的值是一一对应的关系,否则会报错
a,c=features 

分配和交换多个变量

f1=1
f2=2
f1,f2=f2,f1  # f1=2,  f2=1

解压一部分元素:占位符和通配符配合使用可以舍弃解压部分元素,注意只能在python3X生效,否则报语法错误

l=[10,1,2,3,5,8,9]
a,*_,c=l            # a=10,c=9,_=[1,2,3,5,8] 
a,*b,c=l            # b=[1,2,3,5,8]  _或b即变量名,不能省略
print(*_)           # 1 2 3 5 8
_,m,n,g,_=l         # _='9'
a,b,*_=l            # a=10,  b=1,    *_=2 3 5 8 9,   _=[2,3,5,8,9]

扩展的迭代解压语法:

专门为解压不确定个数或任意个数元素的可迭代对象而设计的。

通常,这些可迭代对象的元素结构有确定的规则, 星号表达式(通配符)让开发人员可以很容易的利用这些规则来解压出元素来。 而不是通过一些比较复杂的手段去获取这些关联的的元素值。

通配符表达式在迭代元素为可变长元组的序列和字符串操作都是很有用的,比如字符串的分割,注意只能在python3X生效。

迭代元素为可变长元组的序列举例:

list = [
    ('chen', '98', '100'),
    ('zhang', '58',),
    ('chen', '80', '76'),
]

def chen(x, y):
    print('chen', x, y)

def zhang(s):
    print('zhang', s)

for firstname, *args in list:
    if tag == 'chen':
        firstname(*args)        
    elif tag == 'zhang':
        firstname(*args)

# result:
chen 98 100
zhang 58
chen 80 76

字符串操作

line = 'nobody:*:-2:Unprivileged User:/var/empty:/usr/bin/false'
uname, *fields, homedir, sh = line.split(':')  

# *fields=['*','-2','Unprivileged User'] homedir=/var/empty

实现递归算法

items = [1, 10, 7, 4, 5, 9]



def sum(items):
    head, *tail = items
    # 如下语句,等效于:return head + sum(tail) if tail else head
    if tail:
        return head + sum(tail)
    else:
        return head

print(sum(items))

参考文档:

1.1 解压序列赋值给多个变量 — python3-cookbook 2.0.0 文档

https://python3-cookbook-personal.readthedocs.io/zh_CN/latest/c01/p01_unpack_sequence_into_separate_variables.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值