Python如何在列表,字典,集合中根據條件篩選資料?
阿新 • • 發佈:2018-11-27
在程式設計中我們經常遇到下面的一些問題:
- 過濾掉列表[3, 9, -1, 10, 20, -2...]中的負數
- 篩選出字典{'Lilei': 79, 'Tim': 88, 'Lucy':92...}中的值高於90的項
- 篩選出集合{77, 89, 32, 20...}中能被3整除的元素
在Python中,通用的做法是直接使用迴圈迭代:
data = [1, 5, -3, -2, 6, 0, 9] res = [] for x in data: if x >= 0: res.append(x) print(res)
但是在python中我們還可以使用一些相對高階的工具:
一、列表
①使用filter函式
先建立一個隨機列表:
from random import randint
data = [ randint(-10, 10) for _ in range(10) ]
輸出如下:
使用filter函式進行過濾:
filter(lambda x: x>=0, data)
輸出如下:
②使用列表解析
[ x for x in data if x>=0 ]
③測試兩種方法使用的時間
timeit filter(lamba x: x>=0, data) timeit [ x for x in data if x>=0 ]
輸出如下:
根據時間可以看出,列表解析更快一些,而且這兩種解析遠遠快於迭代的原始方案。
二、字典
先構建一個隨機字典:
d = { x: randint(60, 100) for x in range(1, 21) }
輸出如下:
然後進行篩選:
{ k: v for k, v in d.iteritems() if v>90 }
篩選結果如下:
三、集合
使用類表的資料,進行篩選:
{ x for x in s if x % 3 == 0 }
輸出如下: