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

2021-08-04 04:45:01 字數 2669 閱讀 3426

實際案例

在實際開發過程中,常常遇到如下幾種情況:

故應學會在列表、字典和集合中根據條件篩選資料。

1. 列表

通常我們會採用如下**進行篩選:

data = [1, 5, -3, -2, 6, 0, 9]

res =

for x in

data:

if x >= 0:

print res

對此,我們可以使用python中的filter(),具體做法如下:

# -*- coding: utf-8 -*-

from random import randint

# 通過randint()隨機生成含有10個int型別元素的list,且其元素範圍為[-10, 10]

data = [randint(-10, 10) for _ in xrange(10)]

print

data

# 通過filter()過濾掉負數,並將其最終結果列印

print filter(lambda x: x >= 0, data)

除此之外,我們還能使用列表解析過濾掉列表中的負數。

# -*- coding: utf-8 -*-

from random import randint

# 通過randint()隨機生成含有10個int型別元素的list,且其元素範圍為[-10, 10]

data = [randint(-10, 10) for _ in xrange(10)]

print

data

# 通過列表解析過濾掉負數,並將其最終結果列印

print [x for x in

data if x >= 0]

這時,我們可能會有乙個疑問既然這三種方法都可以成功過濾掉列表中的負數,那哪一種方法效率更高呢?這裡,我們可以使用timeit這個計時工具模組,分別測試三種方法的執行時間。其中,我們不妨將第一種方法命名為commreneg(),第二種方法命名為filtreneg(),第三種方法命名為listreneg(),具體**如下:

# -*- coding: utf-8 -*-

from random import randint

import timeit

# 通過randint()隨機生成含有10個int型別元素的list,且其元素範圍為[-10, 10]

data = [randint(-10, 10) for _ in xrange(10)]

defcommreneg

(): res =

for x in data:

if x >= 0:

print res

deffiltreneg

():# 通過filter()過濾掉負數,並將其最終結果列印

print filter(lambda x: x >= 0, data)

deflistreneg

():# 通過列表解析過濾掉負數,並將其最終結果列印

print [x for x in data if x >= 0]

if __name__ == '__main__':

print (timeit.timeit("commreneg()", setup="from __main__ import commreneg", number=1))

print (timeit.timeit("filtreneg()", setup="from __main__ import filtreneg", number=1))

print (timeit.timeit("listreneg()", setup="from __main__ import listreneg", number=1))

其執行結果如圖所示:

[3, 3, 6, 6, 4]

0.00333480301869

[3, 3, 6, 6, 4]

0.00176789890732

[3, 3, 6, 6, 4]

0.00172641700262

從圖中可以看出第三種方法執行最快,因此推薦使用第三種方法根據條件篩選資料。

2. 字典

既然在列表中已經分析出,採用列表解析執行速度最快,故在此處採用類似於列表解析的方法過濾掉字典中我們不想要的鍵值對,具體操作如下:

# -*- coding: utf-8 -*-

from random import randint

# 隨機生成含有20個鍵值對的字典

d =

print d

# 通過類似於列表解析的方法過濾掉值小於90的鍵值對

print

3. 集合

在列表和字典中,都可以採用同一種方式過濾掉我們不想要的值,那麼在集合中是否也可以採用呢?答案當然是可以的,那具體操作如下:

# -*- coding: utf-8 -*-

from random import randint

data = [randint(-10, 10) for _ in xrange(10)]

# 將list轉為集合

s = set(data)

print

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

如何在列表,字典,集合中根據條件篩選資料?1 過濾掉列表 3,9,1,10,20,2 中的負數 2 篩出字典中值大於90的項 3 篩出集合中能被3整除的元素 解決方案 1 列表 方法1 列表解析 x for x in data if x 0 from random import randint l ...

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

x for x in data if x 0 列表解析 filter lambda x x 0,data filter解析from random import randint randint?randint?列印函式資訊 l randint 10,10 for in range 10 x for x...

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

外鏈轉存失敗 img crpfynaz 1564054291960 assets 1564049968398.png 使用 for 迴圈 速度 推薦 data 1 2,8,2 6,9,42,36 res for i in data if i 0 print res 使用 filter 過濾函式 速度...