【基础06】【自学笔记】python常用推导式
推导式
推导式(英文名:comprehensions),也叫解析式,是Python的一种独有特性。
推导式是可以从一个数据序列构建另一个新的数据序列的结构体。
总共有四种推导式:
-
列表(list)推导式
-
字典(dict)推导式
-
集合(set)推导式
-
生成器推导式
1. 列表推导式
列表推导式的基本格式
new_list = [expression for_loop_expression if condition]
举个例子。
我想找出一个数值列表中为偶数的元素,并组成新列表,通常不用列表推导式,可以这么写
old_list = [0,1,2,3,4,5] new_list = [] for item in old_list: if item % 2 == 0: new_list.append(item) print(new_list) # output: [0, 2, 4]
一个简单的功能,写的代码倒是不少。
如果使用了列表推导式,那就简洁多了,而且代码还变得更加易读了。
>>> old_list = [0,1,2,3,4,5] >>> >>> new_list = [item for item in old_list if item % 2 == 0] >>> print(new_list) # output: [0, 2, 4] [0, 2, 4]
多参数列表推导式:
1.前面列表生成式都只传一个参数x,如果有两个列表如何去运算呢?
a = [1, 2, 3, 4, 5]
b = ["a", "b", "c", "d", "e"]
如何得出c = ["a1", "b2", "c3", "d4", "e5"]
# coding:utf-8 a = [1, 2, 3, 4, 5] b = ["a", "b", "c", "d", "e"] # 多个参数列表生成式 c = [str(x)+str(y) for x, y in zip(b, a)] print(c) # 结果:['a1', 'b2', 'c3', 'd4', 'e5']
2. 字典推导式
字典推导式的基本格式,和 列表推导式相似,只是把 []
改成了 {}
,并且组成元素有两个:key 和 value,要用 key_expr: value_expr
表示。
new_dict ={ key_expr: value_expr for_loop_expression if condition }
举个例子。
我想从一个包含所有学生成绩信息的字典中,找出数学考满分的同学。
old_student_score_info = { "Jack": { "chinese": 87, "math": 92, "english": 78 }, "Tom": { "chinese": 92, "math": 100, "english": 89 } } new_student_score_info = {name: scores for name, scores in old_student_score_info.items() if scores["math"] == 100} print(new_student_score_info) # output: {'Tom': {'chinese': 92, 'math': 100, 'english': 89}}
3. 集合推导式
集合推导式跟列表推导式也是类似的。 唯一的区别在于它使用大括号{}
,组成元素也只要一个。
基本格式
new_set = { expr for_loop_expression if condition }
举个例子
我想把一个数值列表里的数进行去重处理
>>> old_list = [0,0,0,1,2,3] >>> >>> new_set = {item for item in old_list} >>> print(new_set) {0, 1, 2, 3}
4. 生成器推导式
生成器推导式跟列表推导式,非常的像,只是把 []
换成了 ()
-
列表推导式:生成的是新的列表
-
生成器推导式:生成的是一个生成器
直接上案例了,找出一个数值列表中所有的偶数
>>> old_list = [0,1,2,3,4,5] >>> new_list = (item for item in old_list if item % 2 == 0) >>> new_list <generator object <genexpr> at 0x10292df10> >>> next(new_list) 0 >>> next(new_list) 2
本文来自博客园,作者:橘子偏爱橙子,转载请注明原文链接:https://www.cnblogs.com/xfbk/p/15708988.html