需求:
前面的文章讲的是使用变量的个数需要和迭代器数据变量的元素个数相同的方法,但更多的时候确实不想根据元素个数n来定义相应多的变量,而是希望用较少的变量(

def drop_first_last(grades):
def avg(my_list):
return sum(my_list) / len(my_list)
first, *middle, last = sorted(grades)
return avg(middle)
1
2
3
4
5
当然,“星表达式”可以在任何位置,对应的解包元素存入之后,都会形成一个列表(即使没有对应元素,也是空列表)。这里可以再想像一个例子,你正在查看自己近1整年的工资流水,你想计算一下前11个月的工资平均值和当月的工资进行比较,自然可以这么做:

salary_record = (9000, 9000, 12000, 9000, 7000, 8000, 9000, 9000,
10000, 10000, 8500, 10500)
*trailing_months, current_month = salary_record
trailing_avg = sum(trailing_months) / len(trailing_months)
result = current_month > trailing_avg
1
2
3
4
5
扩展:
上面举的例子也许会让读者觉得多此一举,毕竟无论是元组还是列表,用更多其他方式来获取相应的结果,比如第一个可以直接这么获取:

middle_avg = sum(sorted(grades)[1 : len(grades) - 1]) / (len(grades) - 2)
1
当然还有很多办法,这就看大家觉得用什么方式实现更好的表达自己思想了。此外,“星表达式”对处理一种含有多个长度不等元组组成的列表的数据,有他自己独特的优势:

records = [
('Jason', 'SE', 6),
('Lee', 'Python'),
('Jason', 'Web', 2),
]

def show_jason(x, y):
print('Jason', x, y)

def show_lee(s):
print('Lee', s)

for tag, *args in records:
if tag == 'Jason':
show_jason(*args)
elif tag == 'Lee':
show_lee(*args)

In [67]: runfile('/home/jason/codes/test.py', wdir='/home/jason/codes')
Jason SE 6
Lee Python
Jason Web 2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
这里还可以举一个求列表元素和的有趣的递归方法:

def sum(items):
head, *tail = items
return head + sum(tail) if tail else head

sum(range(10))
Out[71]: 45
1
2
3
4
5
6
当然,大家都懂得,递归从来都不是一个解决问题的好办法,所以看看也就行了。
————————————————
版权声明:本文为CSDN博主「哈北儿」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/skysword_li/article/details/77618926

Python实用黑科技——解包元素(2)的更多相关文章

  1. Python实用黑科技——解包元素(1)

    需求: 很多时候手上已经有了一个具有n个元素的列表或者元组,你打算把这些元素单独取出来(解包)放入n个变量组成的集合(这里的集合和Python自己的set不同)中. 方法: 显然,最好的办法就是直接用 ...

  2. Python实用黑科技——找出最大/最小的n个元素

    需求: 快速的获取一个列表中最大/最小的n个元素. 方法: 最简便的方法是使用heapq模组的两个方法nlargest()和nsmallest(),例如: In [1]: import heapqIn ...

  3. Python实用黑科技——找出序列里面出现次数最多的元素

    需求: 如何从一个序列中快速获取出现次数最多的元素. 方法: 利用collections.Counter类可以解决这个问题,特别是他的most_common()方法更是处理此问题的最快途径.比如,现在 ...

  4. Python实用黑科技——以某个字段进行分组

    需求: 当前有个字典实例,你想以某个字段比如”日期”对整个字典里面的元素进行分组. 方法: itertools.groupby()函数是专门用来干这个活的.请看下面这个例子,这里有一个列表构成的字典, ...

  5. python基础之打/解包及运算符与控制流程

    python基础之打/解包及运算符与控制流程 python中的解压缩(即序列类型的打包和解包) python提供了两个设计元祖和其他序列类型的处理的便利,也就是自动打包与自动解包功能,比如: data ...

  6. Python特色的序列解包、链式赋值、链式比较

    一.序列解包 序列解包(或可迭代对象解包):解包就是从序列中取出其中的元素的过程,将一个序列(或任何可迭代对象)解包,并将得到的值存储到一系列变量中. 一般情况下要解包的序列包含的元素个数必须与你在等 ...

  7. Python中的参数解包:`*`表达式和 `**`表达式

    目录 1.参数解包:方法调用中的*表达式和**表达式 2.参数解包:方法定义中的*表达式和**表达式 3.在元组,列表,集合和字典中解包 4.Extended Unpacking:赋值表达式左边的*表 ...

  8. 第4.7节 Python特色的序列解包、链式赋值、链式比较

    一.序列解包 序列解包(或可迭代对象解包):解包就是从序列中取出其中的元素的过程,将一个序列(或任何可迭代对象)解包,并将得到的值存储到一系列变量中. 一般情况下要解包的序列包含的元素个数必须与你在等 ...

  9. python收集参数与解包

    收集任意数量的实参 def make_pizza(*toppings): """打印顾客点的所有配料""" print(toppings) ...

随机推荐

  1. 【Trie】Immediate Decodability

    [题目链接]: https://loj.ac/problem/10052 [题意]: 就是给一些串,是否存在两个串是相同前缀的. [题解] 模板题,不想解释了. [代码]: #include<c ...

  2. select in关键字查询匹配多个字段

    select id from table where (num,name) in ((num1,'name1'),(num2,'name2'))

  3. 给枚举定义DescriptionAttribute

    在C#中,枚举用来定状态值很方便,例如我定义一个叫做Season的枚举 public enum Season { Spring = 1, Summer = 2, Autumn = 3, Winter ...

  4. 6. Java基本数据类型

    Java 基本数据类型 变量就是申请内存来存储值.也就是说,当创建变量的时候,需要在内存中申请空间. 内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用来储存该类型数据. 因此,通过定义不 ...

  5. 日志(logging)与正则(re)模块

    logging模块 #日志:日常的流水 =>日志文件,将程序运行过程中的状态或数据进行记录,一般都是记录到日志文件中 #1.logging模块一共分为五个打印级别 debug.info.warn ...

  6. element-ui 中 el-table 相关操作

    1.带checkbox  获取所有选择的行. this.$refs.multipleTable.selection 获取选中的单行 this.$refs.roleTable.store.states. ...

  7. 三、DQL语言

    目录 一.基础查询 (一)语法 (二)特点 (三)示例 二.条件查询 (一)语法 (二)筛选条件的分类 三.排序查询 (一)语法 (二)特点 四.常见函数 (一)介绍 (二)分类 五.单行函数 (一) ...

  8. Oracle笔记(十五) 数据库备份

    数据库的备份操作是在整个项目运行中最重要的工作之一. 一.数据的导出和导入 数据的导出和导入是针对于一个用户的备份操作,可以按照如下的方式完成: 1.  数据的导出 在硬盘上建立一个文件夹:c:\ba ...

  9. web开发:jquery高级

    一.jq选择器 二.属性操作 三.jq轮播图 四.样式操作 五.jq动事件 六.jq动画 七.自定义动画 八.jq动画案例 一.jq选择器 - css3语法选择器 ```js$('css3选择器位') ...

  10. Django上手体验,对比Asp.Net Core框架

    一.前言 最近经常听说“人生苦短,我选python”这句话,处于好奇,笔者对python相关技术和web框架做了一番研究,本篇就对python web框架代表作Django和微软主打web框架Asp. ...