天天看點

帶你認識Python的清單推導式

今天給大家分享幾個Python裡面的騷操作,大家會更加感受到Python編碼的強大。

1.用字典映射代替switch case語句

大家首先看下面這段用C#編寫的switch case代碼,代碼很好了解,switch函數傳入一個參數day,參數的不同對應不同的case語句,那怎麼将這段代碼用Python裡面的字典代替呢?

switch(day)
 {
     case 0:
      dayName = "Sunday";
       break;
     case 1:
       dayName = "Monday";
       break;
     case 2:
       dayName = "Tuesday";
       break;
     ...
     default:
       dayName = "Unknown";
      break;
 }           

複制

我的第一反應是if else條件語句,但是如果用條件語句的話,就展現不出現Python代碼的強大了,條件語句是各種語言都通用的一種形式,再想想有沒有其他的方法?

啊哈,我想到了字典,字典裡面的鍵值對剛好可以映射這個業務功能,具體代碼如下

day = 0
switcher = {
    0:'Sunday',
    1:'Monday',
    2:'Tuesday'
}

day_name = switcher.get(day,'Unknown')

print(day_name)           

複制

上面代碼中用到一個Python内置函數get,get函數有很好的容錯性,第一個參數就是day,第二個剛好對應switch case語句中的‘unknown’

但這樣寫還是用一定的局限性,有點基礎的同學都知道,switch case之間可以随便擴充,寫很多子產品,那麼這樣一來,再把字典的值當作是一個常量就不合适了,是以,我們可以自定義函數,将函數作為一個參數傳入字典中的值位置,具體代碼如下

day = 0

def get_sunday():
    return 'Sunday'

def get_MOnday():
    return 'Monday'

def get_Tuesday():
    return 'Tuesday'

def get_default():
    return 'Unknown'

switcher = {
    0:get_sunday,
    1:get_MOnday,
    2:get_Tuesday
}

day_name = switcher.get(day,get_default)()   
print(day_name)           

複制

2.清單推導式

叫清單推導式不是說隻能推導清單,至于它為什麼叫這個,who care,還是通過一個執行個體來了解。

比如現在有一個清單,通過周遊清單,然後将每個元素平方後列印結果。

a = [1,2,3,4,5,6,7,8]


b = [i**2 for i in a]

print(b)           

複制

現在如果加一個條件,将清單中大于5的元素平方後列印結果,也很友善,直接在後面加一個if 條件判斷

a = [1,2,3,4,5,6,7,8]
a1 ={1,2,3,4,5,6,7,8}      #集合推導

b = [i**2 for i in a if i>=5]
b1 = {i**2 for i in a if i>=5}

print(b)
print(b1)           

複制

3.字典推導清單推導式

剛才已經說了,不僅僅隻有清單可以用清單推導式,那字典如何實作這個功能呢?

students = {
    '喜小樂':18,
    '石敢當':20,
    '橫小五':15
}

b = {key for key,value in students.items()}
print(b)           

複制

通過上面的代碼可以看出,首先字典的最外層是{},其次字典有key和value,再用一個内置函數items将字典的鍵或值提取出來。

當然,我們也可以将鍵和值颠倒一下

students = {
    '喜小樂':18,
    '石敢當':20,
    '橫小五':15
}

b = {value,key for key,value in students.items()}
print(b)           

複制

最後,我們用這個看一下元組的清單推導式

students = {
    '喜小樂':18,
    '石敢當':20,
    '橫小五':15
}

b1 = (key for key,value in students.items())   #元組推導清單推導式
print(b1)           

複制

<generator object <genexpr> at 0x000000000216A750>           

複制

運作代碼,結果很奇怪,不能将鍵和值顯示出來,而是出現generator,為什麼會這樣呢?因為元組是不可變的,這個知識點在前面學習過,不知道大家還有沒有印象。

那怎麼将鍵和值顯示出來,具體代碼如下:

students = {
    '喜小樂':18,
    '石敢當':20,
    '橫小五':15
}

b1 = (key for key,value in students.items())   #元組推導清單推導式

for x in b1:
     print(x)           

複制

總結

清單推導式是一種非常簡潔的建立清單的方式,很多時候我們需要建立一個滿足特定要求的新清單,不得不用for循環建立,而用清單推導式來表達隻需要一行代碼即可。