首页 > 编程语言 >python 解压可迭代对象赋值给多个变量

python 解压可迭代对象赋值给多个变量

时间:2023-12-03 20:31:28浏览次数:39  
标签:解压 1212 迭代 python 元素 current trailing

1.2 解压可迭代对象赋值给多个变量

问题

如果一个可迭代对象的元素个数超过变量个数时,会抛出一个 ValueError 。那么 怎样才能从这个可迭代对象中解压出 N 个元素出来?

解决方案

Python 的星号表达式可以用来解决这个问题。比如,你在学习一门课程,在学期 末的时候,你想统计下家庭作业的平均成绩,但是排除掉第一个和最后一个分数。如果 只有四个分数,你可能就直接去简单的手动赋值,但如果有 24 个呢?这时候星号表达 式就派上用场了:

def drop_first_last(grades): 
	first, *middle, last = grades 
  return avg(middle)

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

>>> record = ('Dave', '[email protected]', '773-555-1212', '847-555-1212') >>> name, email, *phone_numbers = record
>>> name
'Dave'
>>> email
'[email protected]'
>>> phone_numbers ['773-555-1212', '847-555-1212'] >>>

值得注意的是上面解压出的 phone_numbers 变量永远都是列表类型,不管解压的 电话号码数量是多少(包括 0 个)。所以,任何使用到 phone_numbers 变量的代码就不 需要做多余的类型检查去确认它是否是列表类型了。

星号表达式也能用在列表的开始部分。比如,你有一个公司前 8 个月销售数据的 序列,但是你想看下最近一个月数据和前面 7 个月的平均值的对比。你可以这样做:

*trailing_qtrs, current_qtr = sales_record trailing_avg = sum(trailing_qtrs) / len(trailing_qtrs) return avg_comparison(trailing_avg, current_qtr)

下面是在 Python 解释器中执行的结果:

>>> *trailing, current = [10, 8, 7, 1, 9, 5, 10, 3] >>> trailing
[10, 8, 7, 1, 9, 5, 10]
>>> current
3

讨论

扩展的迭代解压语法是专门为解压不确定个数或任意个数元素的可迭代对象而设 计的。通常,这些可迭代对象的元素结构有确定的规则(比如第 1 个元素后面都是电 话号码),星号表达式让开发人员可以很容易的利用这些规则来解压出元素来。而不是 通过一些比较复杂的手段去获取这些关联的元素值。

标签:解压,1212,迭代,python,元素,current,trailing
From: https://blog.51cto.com/u_16251183/8669034

相关文章

  • pythont基础-条件流程语句
    1、条件流程语句1、if语句if表达式1:语句if表达式2:语句elif表达式3:语句else:语句elif表达式4:2、for循环语句#以下for实例中使用了break语句,break语句用于跳出当前循环体:sites=["Baidu","Google","Runoob","Taobao"]forsitein......
  • Python基础_01_MarkDown语法基础
    MarkDown基础语法[一]Typora(1)下载官网:Typora官方中文站(typoraio.cn)正版价格及介绍:89元/3台设备;89元三个设备码(重装系统设备码失效)绿色版:网盘链接[.\Typora\resources文件夹下替换(app.asar)](2)部分设置主题更改:Typora官方主题库下载完成后,解压压缩包后将.css......
  • python基础-encode()、decode()函数
    1、encode()函数用于将字符串转换为指定编码格式的字节序列语法:其中,encoding是指定的编码格式,例如UTF-8、GBK等;errors是可选参数,用于指定编码错误的处理方式。string.encode(encoding,errors)示例s="周杰伦"bs1=s.encode("gbk")#bytes类型bs2=s.encode("utf......
  • python基础-字典
    1、字典定义字典是一种可变的容器,可以存储任意类型的数据字典中的每个数据都是用"键"(key)进行索引,而不像序列可以用下标进行索引【集合可以用下标进行搜索】字典中的数据没有先后关系,字典的存储是无序的【集合set存储也是无序的】字典的表示方式是以{}括起来,以冒号(......
  • python报错:Pip 20.3+ break proxy connection
    参考:https://www.cnblogs.com/devilmaycry812839668/p/17872452.html   ==================================== 在proxy方式下使用pip有时候会报错。原因是某些版本pip依赖的urllib3库默认使用https方式进行网络连接,但是在proxy模式下由于大部分的proxy工具都是不支持h......
  • python基础-集合
    1、集合的创建用{}进行创建用内置函数set()进行创建示例代码#第一种创建方式s={1,2,3,3,4,5,6,7}print(s,type(s))#第二种创建方式s1=set(range(6))#根据范围进行集合的创建print(s1)s2=set([1,23,34,12,23])#将列表转换为为集合print(s......
  • python基础-元组
    1、元组的声明#Python的元组与列表类似,不同之处在于元组的元素不能修改。#元组使用小括号(),列表使用方括号[]。#元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。/1、代码实例tup1=('Google','Runoob',1997,2000)tup2=(1,2,3,4,5)tup3="a",......
  • python中级之数据类型内置方法
    引子 数据类型是用来记录事物状态的,而事物的状态是不断变化的(如:一个人年龄的增长(操作int类型),单个人名的修改(操作str类型),学生列表中增加学生(操作list类型)等),这意味着我们在开发程序时需要频繁对数据进行操作,为了提升我们的开发效率,python针对这些常用的操作,为每一种数据类型内......
  • 基于python的Linux服务器资源监控
    介绍项目地址:https://github.com/leeyoshinari/performance_monitor已完成如下功能1、监控整个服务器的CPU使用率、iowait、内存使用、磁盘IO、网络带宽和TCP连接数2、监控指定端口的CPU使用率、上下文切换、内存占用大小、磁盘读写和TCP连接数3、针对java应用,可以监控jvm......
  • 日志模块python loguru
    日志模块pythonloguru下载pipinstallloguru开箱即用Loguru的主要概念是只有一个:loggerfromloguruimportloggerlogger.info("Thisisloginfo!")logger.warning("Thisislogwarn!")logger.error("Thisislogerror!")logger.debug("This......