1. 程式人生 > >Python如何在列表,字典,集合中根據條件篩選資料?

Python如何在列表,字典,集合中根據條件篩選資料?

在程式設計中我們經常遇到下面的一些問題:

  • 過濾掉列表[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 }

輸出如下: