1. 程式人生 > 其它 >記錄---python推導式的使用

記錄---python推導式的使用

推導式:用一行迴圈判斷遍歷出一系列資料的方式

注:推導式在使用時只能使用for迴圈和if判斷,if判斷只能是單項判斷

推導式有三種形式:列表推導式、集合推導式、字典推導式

①普通推導式:通過[]和for形式構成

②帶有判斷的推導式:通過[] for if形式構成

③多迴圈推導式:通過[] for for...形式構成

④帶有判斷條件的迴圈推導式:通過[] for for if的形式構成

一、列表推導式

eg1:

list_a = [f'data"{i}"'for i in range(100)]

print(list_a)

執行結果:['data"0"', 'data"1"', 'data"2"', 'data"3"', 'data"4"', 'data"5"', 'data"6"',...]

eg2:生成一個['data1', 'data3', 'data5'......'data99']的列表

list_b = [f'data"{i}"'for i in range(100) if i % 2 == 1]  # if在最後起過濾作用

print(list_b)

eg3:生成一個['data0', 'num1', 'data2', 'num3'.....'data98', 'num99']的列表

list_c = [f'data"{i}"'if i % 2 == 0 else f'num"{i}"'for i in range(100)]  # 'data' if else 'num'做條件判斷,迴圈在後

print(list_c)

# 三元運算子

age = input('輸入年齡:')

res = '成年' if age > 17 else '未成年'

print(res)

二、字典推導式

eg1:有一個列表list_d,把它轉換為一個下標為key,值為value,字典格式的資料

list_d = ['a', 'b', 'c', 'd', 'e', 'f', 'g']

非推導式做法:

dict_a = {}

for i, j in enumerate(list_d):

  dict_a[i] = j

print(dict_a)

推導式做法:

# 語法:{key:value for i in xx}

dict_b = {k: v for k, v in enumerate(list_d)}

print(dict_b)

執行結果:

{0: 'a', 1: 'b', 2: 'c', 3: 'd', 4: 'e', 5: 'f', 6: 'g'}

eg2:將如下字元資料轉化為字典

cook_str = 'BIDUPSID=D0727533D7147B7;PSTM=1530348042; BAIDUID=B1005C9BC2EB28; sugstore=0;__cfduid=d0a13458f8ac2a;BD_UPN=12314353;ispeed_lsm=2;BDORZ=B490B5EBF6F3CD402'

# 字典推導實現

dict_c = {i.spilt('=')[0].strip(): i.split('=')[1] for i in cook_str.split(';')}

print(dict_c)

# 字典推導式結合列表推導式使用

dict_d = {k.strip(): v for k, v in [i.split('=') for i in cook_str.split(‘;’)]}

print(dict_d)

執行結果:

{'BIDUPSID': 'D0727533D7147B7', 'PSTM': '1530348042', 'BAIDUID': 'B1005C9BC2EB28', 'sugstore': '0', '__cfduid': 'd0a13458f8ac2a', 'BD_UPN': '12314353', 'ispeed_lsm': '2', 'BDORZ': 'B490B5EBF6F3CD402'}

三、集合推導式

eg:

gather_a = {i * 5 for i in range(11)}

print(gather_a)

執行結果:

{0, 35, 5, 40, 10, 45, 15, 50, 20, 25, 30}

PS:

enumerate()函式:用於將一個可遍歷的資料物件(如列表、元組或字串)組合為一個索引序列,同時列出資料下標和資料,一般用在 for 迴圈當中。

split()函式:拆分字串,通過指定分隔符對字串進行切片,並返回分割後的字串列表(list)。

strip()函式:方法用於移除字串頭尾指定的字元(預設為空格或者換行符)或字元序列。

zip()函式:用於將可迭代的物件作為引數,將物件中對應的元素打包成一個個元組,然後返回由這些元組組成的列表。