python从任意长度的可迭代对象中分解元素

  1. 问题
    需要从某个可迭代对象中分解出N个元素,但是这个可迭代对象的长度可能超过N,这会导致出现“分解值过多”的异常。
  2. 解决方案
    python的 *表达式可以用来解决这个问题。
    3.例如开设了一门课程,并决定在期末的作业成绩中去掉第一个和最后一个,只对中间剩下的成绩做平均分统计。如果只有四个成绩,也许可以简单地将4个都分解出来,但是如果有24个呢?
    *表达式可以使这这一切都变得简单.
def drop_first_last(grades):
    first,*middle,last=grades
    return avg(middle)

4.另一个用例是假设有一些用户记录,记录由姓名和电子邮件地址组成,后面跟着任意数量的电话号码。则可以像这样分解记录:

record=('Dave','dave@qq.com','773-556-222','282-222-332')
name,email,*phone_numbers=user_record
print(name,email,phone_numbers)

注意:不管需要分解多少个电话号码(甚至没有),变量phone—numbers都一直是列表。由*修饰的变量也可以位于列表的第一个位置。

5.*式语法在迭代一个变长的元组序列时尤其有用。例如有一个带标记的元组序列:

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)
    if tag=='bar':
        do_bar(*args)

6.另外当和某些特定的字符串处理操作相结合,比如拆分(split)操作时,这种*式的语法所支持的分解操作也非常有用。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值