python解压可迭代对象赋值给多个变量
如果一个可迭代对象的元素个数超过了变量的个数,会出现“解压值太多”的异常,python提供*号表达式(码夫破石的理解)来解决。
1,求一组平均值,就以类似学生成绩为例,要求是去掉第一个和最后一个学生的分数。
1 #!usr/bin/env python3
2 # -*-Coding:utf-8 -*-
3 '''
4 如果一个可迭代对象的元素个数超过变量个数时,会出现“太多解压值”的异常
5 '''
6
7 #求一组数据的平均值(类似学生成绩),但是你只知道要去除第一个和最后一个,中间有多少值并不知道
8 def average(grades):
9 #定义函数,用以求平均值
10 first, *middle, last = grades
11 #print(first) #打印第一个值
12 #print(middle) #打印中间值,一定是列表
13 #print(last) #打印最后一个值
14 return sum(middle) / len(middle) #求中间列表的平均值
15
16 scores = [91,90,98,99,100,92,95,99,89] #定义列表,用以存储学生成绩
17 avg_score = average(scores) #调用函数并赋值给变量avg_score
18 print(avg_score) #打印平均值
2,有一组用户记录列表,包含名字,邮箱,地址,还有电话号码,但是电话号码是不确定的
1 #有一组用户记录列表,包含名字,邮箱,地址,还有电话号码,但是电话号码是不确定的
2 record = ['eric','ecic@gmail.com','13838384388','15838383838',] #定义列表
3 name, email, *phone_numbers = record #将列表中的各组值赋给name,email,phone_numbers,其中phone_numers不确定有多少。
4 print(name) #打印name
5 print(email) #打印email
6 print(phone_numbers) #打印phone_numbers列表,即使是空的也不会报错。
3,有一组10个月销售数据的序列,突然想看看前9个月的平均值和第十个月的销售额对比:
1 def compare(sales_record): #定义函数
2 *trailing_qtrs, current_qtr = sales_record #将销售的前9个月数据存储在trailing_qtrs里面,第10个月的存储在current_qtr
3 print(trailing_qtrs,len(trailing_qtrs)) #打印看是否符合预期
4 print(current_qtr) #打印看是否符合预期
5 trailing_avg = sum(trailing_qtrs) / len(trailing_qtrs) #求前9个月的平均值
6 return [trailing_avg,current_qtr] #返回一个列表,前9个月的平均值和当前月份的数据
7
8 sales_record = [10,8,8,7,1,9,2,3,4,3] #定义10个月的销售数据
9 n = compare(sales_record) #调用函数compare,并赋值给变量n
10 print(n) #打印n
4,星号表达式在可变长元组的序列的应用:
1 #定义列表。列表元素为元组
2 records = [
3 ('foo',1,2),
4 ('bar','hello'),
5 ('foo1',3,4,5),
6 ]
7
8 tags = [] #定义空列表
9 args = [] #定义空列表
10 for tag, *arg in records: #通过循环获取列表里各元组的第一个值给tag,通过星号表达式将第一个值后的全部值赋给arg
11 print(tag) #打印是否符合预期
12 print(arg) #打印是否符合预期
13 tags.append(tag) #将预期的值附加到列表tags末尾形成新列表tags
14 args.append(arg) #将预期的值附加到列表args末尾形成新列表args
15 print(tags) #打印看是否符合预期
16 print(args) #打印看是否符合预期
17
18 #定义函数
19 def do_foo(x,y):
20 #查找列表里的第一组元组,并打印出来
21 print("The function do foo tag is: " + records[0][0], "x is: {}, y is: {}. ".format(x,y))
22
23 #定义函数
24 def do_bar(s):
25 #查找元组里的第二组元素,并打印出来
26 print("The function do bar tag is: " + records[1][0], "s is: {}. ".format(s))
27
28 #定义函数
29 def do_foo1(p,*q): #因为解压出来的arg是三个,所以这里用星号表达式取得arg里的后两个值
30 #查找元组里的第三组元素,并打印出来
31 print("The function do foo1 tag is: " + records[2][0], "p is: {}, q is: {}. ".format(p,q))
32 print(type(q)) #得到的类型是元组类型
33 #循环读取records里的第一个元素和第一个元素后的所有元素
34 for tag, *args in records:
35 if tag == 'foo':
36 do_foo(*args) #将arg里的元素分别赋值给x,y
37 elif tag == 'bar':
38 do_bar(*args) #将arg里的元素分别赋值给s
39 elif tag == 'foo1':
40 do_foo1(*args) #将arg里的元素分别赋值给p,q
41 """
42 一个问题,就是do_foo1的参数*q,在前面验证过,通过星号表达式得到的元素组成的都是列表,但是这里的q是元组,而不是列表
43 """
历史遗留问题:就是上面代码do_foo1的参数*q,在前面验证过,通过星号表达式得到的元素组成的都是列表,哪怕0个,但是这里的q得到是元组,而不是列表,请高手解答, 不胜感激。
5,星号表示法分割字符串:
1 #星号表示法分割字符串
2 strings = 'Nobody:*:-2:02:213:Unprivilleged User:/var/empty:/usr/bin/ptyon3'
3
4 uname, *field, homedir, shelldir = strings.split(":") #解压赋值,用:断句;
5 print(uname)
6 print(field)
7 print(homedir)
8 print(shelldir)
6,解压一些元素,然后丢弃,不能简单的使用*,可以使用一个普通的废弃名称如_或者ign.
1 #解压一些元素,然后丢弃,不能简单的使用*,可以使用一个普通的废弃名称如_或者ign.
2
3 records = ['Eric',50,132.45,(12,18,2020)] #定义列表
4 name, *_, (*_, year) = records #解压并赋值
5 print(name) #打印
6 print(*_) #打印
7 print(*_) #打印
8 print(year) #打印
python解压可迭代对象赋值给多个变量的更多相关文章
- python_cookbook之路:数据结构-解压可迭代对象赋值给多个变量以及扩展的迭代解压语法(*)
1.一一对应: >>> data = [ 'ACME', 50, 91.1, (2012, 12, 21) ] >>> name, shares, price, d ...
- Python 解压序列、可迭代对象并赋值给多个变量
Python数据结构和类型 1.1 解压序列赋值给多个变量 现在有一个包含N个元素的元组或者是序列,怎样将它里面的值解压后同时赋值给N个变量? 解决思路:先通过简单的解压赋值给多个变量,前提是变量的数 ...
- python 解压 压缩包
转 http://m.blog.csdn.net/blog/wice110956/26597179# 这里讨论使用Python解压如下五种压缩文件: .gz .tar .tgz .zip .rar ...
- python解压压缩包的几种方法
这里讨论使用Python解压例如以下五种压缩文件: .gz .tar .tgz .zip .rar 简单介绍 gz: 即gzip.通常仅仅能压缩一个文件.与tar结合起来就能够实现先打包,再压缩. ...
- python解压压缩包的几种方式
这里讨论使用Python解压如下五种压缩文件: .gz .tar .tgz .zip .rar 简介 gz: 即gzip,通常只能压缩一个文件.与tar结合起来就可以实现先打包,再压缩. tar: ...
- Python迭代器,可迭代对象,生成器
迭代器 迭代器(iterator)有时又称游标(cursor)是程式设计的软件设计模式,可在容器物件(container,例如链表或阵列)上遍访的界面,设计人员无需关心容器物件的内存分配的实现细节. ...
- Python中的可迭代对象与迭代器对象
刚刚学习Python,对“可迭代对象”和"迭代器对象"的个人理解,不知道对不对. 1.几个概念 (1)迭代工具:包括for循环.列表解析.in成员关系测试.....等等在内的,用于 ...
- Python中的可迭代对象
Python中的可迭代对象有:列表.元组.字典.字符串:常结合for循环使用: 判断一个对象是不是可迭代对象: from collections import Iterable isinstanc ...
- python 解压、复制、删除 文件
一.python3解压文件 1.python 解压文件代码示例 如下代码主要实现zip.rar.tar.tar.gz四种格式的压缩文件的解压 def unzip_file(src_file, dst_ ...
随机推荐
- Unity减少构建安装包的体积(210MB减小到7MB)
概述 项目简介 由于是公司内做的项目,不方便开源,就只分享优化过程吧. 项目信息 逐日是一个移动端单机小游戏,使用Unity开发,目前已将项目使用的Unity升级到2019.4.14f1c1 (3e5 ...
- CF980C Posterized
先来吐槽一下这个 sb 翻译,根本就没做过题吧-- 大概就是让你给值域分成连续的几组,每组大小不能超过 \(k\),然后将序列中的值全部替换成其组内的最小值,要使得序列的字典序最小. 因为是字典序,所 ...
- LeetCode周赛#204 题解
1566. 重复至少 K 次且长度为 M 的模式 #模拟 题目链接 题意 给定正整数数组 arr,请你找出一个长度为 m 且在数组中至少重复 k 次的模式. 模式 是由一个或多个值组成的子数组(连续的 ...
- .nnmodel to .mlmodel
做项目时遇到.nnmodel 模型,不知道这是什么框架模型,没有头绪,抓住文件magic number是lzfse compressed, compressed tables. 在https://gi ...
- linux 权限提升
1.内核提权,根据版本搜索相应exp 查看操作系统版本命令 uname –a lsb_release –a cat /proc/version 查看内核版本 cat /etc/issue 查看发行类型 ...
- 为什么要小心使用 Task.Run
昨天在博客园有园友问了我一个问题,是这样的: 先是半个月前 @碧水青荷 童鞋的一句话"大家都说不要随便 Task.Run(()=>{}) 这样写",当时没有想太多,这句话并没 ...
- 【GDKOI2014】JZOJ2020年8月13日提高组T2 石油储备计划
[GDKOI2014]JZOJ2020年8月13日提高组T2 石油储备计划 题目 Description Input Output 对于每组数据,输出一个整数,表示达到"平衡"状态 ...
- Flv.js记录(vue)
下载 npm install flv.js 插入 import flvjs from 'flv.js' 第一种报错:Failed to read the 'buffered' property f ...
- day3(django配置跨域)
1.跨越原理 1. 首先浏览器安全策略限制js ajax跨域访问服务器 2. 如果服务器返回的头部信息中有当前域: // 允许 http://localhost:8080 这个网站打开的页面中的js访 ...
- python核心高级学习总结4-------python实现进程通信
Queue的使用 Queue在数据结构中也接触过,在操作系统里面叫消息队列. 使用示例 # coding=utf-8 from multiprocessing import Queue q = Que ...