[TOC]
## 列表推导式
列表推导式(又称列表解析式),可以便捷生成指定条件的列表
格式如:
```python
variable = [out_exp for out_exp in input_list if out_exp == 2]
```
out_exp:输出表达式
指定条件,主要从 for xx in xx if xx 中产生。
加上有个列表tmp_list = [1,2,3,4,5,6],如果我们想过滤出其中大于3的元素,然后各自乘以2,生成一个新的列表,我们可以如下面这般实现:
```python
tmp_list = [1, 2, 3, 4, 5, 6]
alist = [x * 2 for x in tmp_list if x > 3]
print(alist)
```
代码解释:
`[x * 2 for x in tmp_list if x > 3]` 中,x\*2 是最终的输出表达式,其中x是后面条件表达式 `for x in tmp_list if x>3` 中符合条件的输出值。
## map 函数
map函数会将一个函数映射到一个输入列表的所有元素上。
格式:
```python
map(func, *iterables)
```
假设我们需要将一个列表中的每个元素都乘以2,获得一个新的列表,则我们可以如下面这般实现。
```python
tmp_list = [1,2,3,4,5,6]
alist = list(map(lambda x:x*2,tmp_list))
print(alist)
```
输出结果如下:
```cmd
[2, 4, 6, 8, 10, 12
```
map函数,会逐一**将可迭代对象的每个元素作为func函数的入参**,进行计算后,返回一个map对象。
## filter 函数
filter过滤列表中的元素,并且**返回一个由所有`符合要求`的元素所构成的列表**
格式为:
```python
filter(func or None, iterable)
```
map函数,会逐一**将可迭代对象的每个元素作为func函数的入参**,进行计算后,返回一个filter对象。
假设,我们需要过滤一个列表,过滤出大于3的元素,则我们可以如下这般实现:
```python
tmp_list = [1,2,3,4,5,6]
alist = list(filter(lambda x:x>3,tmp_list))
print(alist)
```
输出结果如下:
```cmd
[4, 5, 6]
```
## sorted 函数
sorted函数 对一个可迭代的对象进行排序操作,返回一个新的列表。可以自定义排序的方法,默认是升序,但是也可以指定为降序。
格式为:
```python
sorted(iterable, ,key=None, reverse=False)
```
参数 `key`用于**指定用于比较的对象**,key函数的参数就是取自于可迭代对象(iterable)中的 **`一个`** 元素来进行排序。注意,key函数只接受一个入参。
实例一:
例如有四个学生,格式如("姓名","年龄","成绩"),根据不同的条件进行排序,如下
```python
student_list = [('a',18,90),('c',20,99),('b',19,80),('d',15,100)]
sort_by_age = sorted(student_list,key=lambda student:student[1])
print(sort_by_age)
```
排序字段是student[1],也就是每个学生的第二个字段“年龄”,所以按年龄升序排列,运行结果如下:
```cmd
[('d', 15, 100), ('a', 18, 90), ('b', 19, 80), ('c', 20, 99)]
```
<br>
实例二:
假设有个学生类,创建出三个学生对象,每个对象有属性“姓名”,“年龄”,“成绩”。如下
```python
class Student(object):
def __init__(self, name, age, score):
self.name = name
self.age = int(age)
self.score = float(score)
s1 = Student("Milton", 31, 80)
s2 = Student("Cherish", 32, 100)
s3 = Student("Evan", 27, 90)
```
如果我们想对这三个学生排序,**根据成绩降序排序**,则该如何实现呢?
```python
stu_list = [s1, s2, s3]
sort_by_score = sorted(stu_list, key=lambda stu: stu.score,reverse=True)
# sort_by_score 其实已经做好了排序,但是为了显示直观,下面将每个学生的姓名与成绩打印出来。
print(list(map(lambda stu:(stu.name,stu.score),sort_by_score)))
```
运行结果如下:
```cmd
[('Cherish', 100.0), ('Evan', 90.0), ('Milton', 80.0)]
```
<hr style="margin-top:100px">
:-: ![](https://box.kancloud.cn/2ff0bc02ec938fef8b6dd7b7f16ee11d_258x258.jpg)
***微信扫一扫,关注“python测试开发圈”,了解更多测试教程!***
- 前言
- chapter01_开发环境
- chapter02_字符串的使用
- chapter03_列表的使用
- chapter04_字典的使用
- chapter05_数字的使用
- chapter06_元组的使用
- chapter07_集合的使用
- chapter08_输入输出
- chapter09_控制流程
- chapter10_实例练习_登录1
- chapter11_python函数入门
- chapter12_python中的类
- chapter13_轻松玩转python中的模块管理
- chapter14_掌握学习新模块的技巧
- chapter15_通过os模块与操作系统交互
- chapter16_子进程相关模块(subprocess)
- chapter17_时间相关模块(time & datetime)
- chapter18_序列化模块(json)
- chapter19_加密模块(hashlib)
- chapter20_文件的读与写
- chapter21_阶段考核2_登录
- chapter22_小小算法挑战(排序&二分法)
- chapter23_用多线程来搞事!
- chapter24_HTTP接口请求(requests)
- chapter25_接口测试框架(pytest)
- chapter26_阶段考核3_HTTP接口测试
- chapter27_HTML解析(pyquery)
- chapter28_阶段考核4_爬虫下载网易汽车
- chapter29_python中的那些编码坑
- chapter30_MySQL数据库操作
- chapter31 高级特性_迭代器与生成器
- chapter32 高级特性_装饰器
- chapter33 高级特性_列表处理