如何在列表, 字典, 集合中根據條件篩選數據

1.列表

[x for x in data if x >= 0] #列表解析
filter(lambda x: x >= 0, data) #filter解析

2.字典

{k: v for k, v in d.items() if v > 90}

3.集合

{x for x in s if x % 3 == 0}

舉例1

from random import randint
randint?

randint? :打印函數信息python

l = [randint(-10, 10) for _ in range(10)] 
[x for x in l if x >= 0] #篩選數據
執行結果:[5, 9, 10]
g = filter(lambda x: x >= 0, l)
next(g)
執行結果:5

python2.7:filter直接返回列表;python3:返回生成器對象,生成器對象是一次性的dom

g = filter(lambda x: x >= 0, l) #篩選數據
list(g)
執行結果:[5, 9, 10]

通常使用列表解析,filter相對慢python2.7

舉例2

d = {'student%d' % i: randint(50, 100) for i in range(1, 21)}
{k : v for k, v in d.items() if v >= 90} #篩選數據
執行結果:{'student2': 94,
 'student9': 99,
 'student15': 95,
 'student16': 92,
 'student18': 97,
 'student20': 96}
#使用filter
g = filter(lambda item: item[1] >= 90, d.items()) #篩選數據
list(g)
執行結果:[('student2', 94),
 ('student9', 99),
 ('student15', 95),
 ('student16', 92),
 ('student18', 97),
 ('student20', 96)]
g = filter(lambda item: item[1] >= 90, d.items()) #篩選數據
dict(g)
執行結果:{'student2': 94,
 'student9': 99,
 'student15': 95,
 'student16': 92,
 'student18': 97,
 'student20': 96}

舉例3

s = {randint(0, 20) for _ in range(20)}
s
執行結果:{0, 1, 2, 3, 4, 9, 10, 12, 13, 18, 19}
{x for x in s if x % 3 == 0} #篩選數據
執行結果:{0, 3, 9, 12, 18}
相關文章
相關標籤/搜索