Python進階-如何優雅的在列表,字典,集合中篩選數據

先給一些實際栗子

  • 過濾掉列表[1, 3, 8, -2, 5 ...]中的負數
  • 篩選出字典 {'python':90, 'java':20. 'c++':70...}中值高於90的項
  • 篩選集合(77, 98, 32, 40...)中能夠被3整除的數

通用的方法就是進行迭代(先對容器進行for循環,在進行條件判斷)可是不符合咱們優雅的身份,咱們不採用java


1.列表問題

首先咱們先導入一個神奇的random函數,他會幫助咱們隨機生成一個列表python

from random import randint
複製代碼

隨機生成10個範圍-10 - 10的數c++

data = [randint(-10, 10) for i in range(10)]
複製代碼

接下來使用咱們的主角filter函數上場,簡單解釋一下這個參數,它的第一個參數接收一個函數(咱們一般用lambda建立一個用來過濾的匿名函數,lambda須要一個參數由data依次傳遞給它,以後這個函數返回一個布爾值,爲真的,該值就會被返回),第二個參數接收列表。好像有點懵逼。看代碼栗子bash

filter(lambda x: x > 0, data)
複製代碼

這樣就大功告成了dom

接下來,咱們使用列表解析去完成這個問題函數

[x for x in data if x > 0]
複製代碼

一樣能夠得出同樣的答案ui

一般首選列表解析,由於列表解析速度快,可是都因爲迭代spa

2.字典問題

依舊隨機生成字典code

d = {x: randint(60, 100) for x in range(1, 21)}
複製代碼

如今咱們只要分數大於90的,咱們來弄一個字典解析cdn

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

ok,大功告成,來繼續解決集合問題

3.集合問題

隨機集合走一波

s = set([randint(-10, 10) for i in range(10)])
複製代碼

咱們查找下集合裏能夠被3整數的數,也就是集合解析

(x for x in s if x  % 3 == 0)
複製代碼

若是個人文章對你有幫助,記得點贊鴨

相關文章
相關標籤/搜索