[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">
:-: 
***微信掃一掃,關注“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 高級特性_列表處理