Python的列表、字典或者集合中如何進行數據篩選呢?首先想到的當然是最簡單的,使用循環語句進行篩選。下面的在列表、字典或者集合中進行數據篩選的技巧來源與慕課網的《Python進階強化訓練》中的內容。以下是相關的學習筆記。
實例一、過濾列表中的負數
主要的思路是使用列表生成式的方式去進行列表的篩選?;蛘呤褂胒ilter函數,調用lambda函數篩選。但是列表生成式的效率更高。下面是實例代碼:
#!/usr/local/env python # coding:utf-8 from random import randint __author__ = "風輕情淡" # 生成10個隨機整數的列表 data = [randint(-10, 10) for _ in range(10)] # filter函數生成的是一個filter對象,需要再迭代取值 ret1 = filter(lambda x: x < 0, data) print(ret1) # 列表生成式方式直接獲得列表,速度比filter函數方式要快一些 ret2 = [x for x in data if x < 0] print(ret2)
實例二、篩選字典值高于90的項目
字典篩選的思路跟列表篩選差不多,使用字典生成式。需要注意的是:Python 3.x 里面,iteritems() 和 viewitems() 這兩個方法都已經廢除了,而 items() 得到的結果是和 2.x 里面 viewitems() 一致的。在3.x 里 用 items()替換iteritems() ,可以用于 for 來循環遍歷。下面是實例代碼:
#!/usr/local/env python # coding:utf-8 from random import randint __author__ = "風輕情淡" # 生成20個成績的字典 data = {x: randint(60, 100) for x in range(1, 21)} # 使用字典生成式,可以直接篩選數據 ret1 = {k: v for k, v in data.items() if v > 90} print(ret1)
實例三、篩選能被3整除的元素
集合的處理思路和列表處理的思路基本是一致的,實例代碼如下:
#!/usr/local/env python # coding:utf-8 from random import randint __author__ = "風輕情淡" # 生成10個隨機整數的列表 data = [randint(-10, 10) for _ in range(10)] # 把列表轉化為集合 s1 = set(data) # 集合生成式方式直接獲得結果 ret1 = {x for x in s1 if x % 3 == 0} print(ret1)
以上的數據篩選方式,都是使用的生成式的方式,相對比較簡潔高效。