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

xie仗劍天涯發表於2017-06-07

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

1. 過濾類別中的負數
# eg_v1 使用迭代判斷

data = [1,4,5,-1,-2,-5,9,10,11]
res1 = []
for x in data:
if x >= 0:
res1.append(x)
print (res1)
# [1, 4, 5, 9, 10, 11]
res2 = []
for y in data:
if y < 0:
res2.append(y)
print (res2)
# [-1, -2, -5]

  

# eg_v2 使用filter函式
filter()函式接收一個函式 f 和一個list,這個函式 f 的作用是對每個元素進行判斷,返回 True或 False,filter()根據判斷結果自動過濾掉不符合條件的元素,返回由符合條件元素組成的新list

from random import randint
data = [randint(-10,10) for _ in xrange(10)]
print (data)
# [-8, 8, 0, -9, -9, 8, -10, 9, -4, 5]
F1 = filter(lambda x : x >= 0,data)
print (F1)
# [8, 0, 8, 9, 5]

  

# eg_v3 使用列表解析

from random import randint
data = [randint(-10,10) for _ in xrange(10)]
print (data)
# [-3, -4, -9, 1, -5, 6, -7, -6, 10, 7]
F2 = [x for x in data if data >= 0]
print (F2)
# [1, 6, 10, 7]

  

可以使用timeit 函式測試小段程式碼片段的執行時間

T1 = timeit filter(lambda x : x >= 0,data)
T2 = timeit [x for x in data if data >= 0]

  


2. 篩選字典中的值
# eg_v4 建立一個字典,並篩選值大於80的數

d = {x: randint(60,100) for x in range(1,20)} 
print (d)
# {1: 93, 2: 98, 3: 70, 4: 80, 5: 60, 6: 73, 7: 100, 8: 71, 9: 86, 10: 87, 11: 62, 12: 97, 13: 87, 14: 96, 15: 77, 16: 70, 17: 79, 18: 87, 19: 99}
dict1 = {k: v for k, v in d.iteritems() if v > 80} # k 為字典中的鍵,v 為字典中的值
print (dict1)
# {1: 93, 2: 98, 7: 100, 9: 86, 10: 87, 12: 97, 13: 87, 14: 96, 18: 87, 19: 99}

  


3. 篩選集合中的元素
# eg_v5 篩選出集合能被3整除的元素

set1 = {12,-1,3,4,7,8,23,18,23,11}
s1 = {x for x in set1 if x % 3 == 0}
print s1
# set([18, 3, 12])

  

 

相關文章