1. 程式人生 > 其它 >Python推導式:列表推導式、集合推導式、字典推導式

Python推導式:列表推導式、集合推導式、字典推導式

技術標籤:Python語法python

一、Python中的推導式

推導式comprehension,可以從一個數據序列構建另一個新的資料序列的結構體。

  • 列表推導式
  • 集合推導式
  • 字典推導式
    在這裡插入圖片描述

二、列表推導式

作用:用一個表示式建立一個有規律的列表或控制一個有規律列表,可以簡化程式碼

需求:建立一個0~1的列表
1、while迴圈實現

# 準備一個空列表
list = []

# 書寫迴圈,依次追加數字到空列表中
i = 0
while i < 10:
    list.append(i)
    i += 1
print(list)

2、for迴圈實現

# 準備一個空列表
ls = []
# 書寫迴圈,依次追加數字到空列表中 for i in range(10): list.append(i) i += 1 print(ls)

3、推導式實現

ls = [i for i in range(10)]  # 此處for與for迴圈相同, for 左側寫返回值
print(ls)

程式碼大大簡化

三、帶if的列表推導式

需求:0~10之間的偶數列表

ls = []
for i in range(10):
    if i % 2 == 0:
        ls.append(i)
print(ls)
# 一般的列表推導式
ls = [i for i in range(
0, 10, 2)] print(ls) # 帶if的列表推導式 ls2 = [i for i in range(10) if i % 2 == 0] print(ls2) 輸出: [0, 2, 4, 6, 8] [0, 2, 4, 6, 8]

四、多個for迴圈實現列表推導式

需求:建立如下列表:[(1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]

ls = []
for i in range(1, 3):
    for j in range(3):
        ls.append((i, j))
print(ls)

ls2 = [(i, j) for
i in range(1, 3) for j in range(3)] print(ls2) 輸出: [(1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)] [(1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]

三、集合推導式

集合有去重。

# 建立一個集合,資料為下述列表的平方
ls = [1, 1, 2, 3]

s = {i ** 2 for i in ls}
print(s)

輸出;{1, 4, 9}

四、字典推導式

字典推導式作用:快速合併list為dict,或提取字典中的目標資料

# 建立一個字典:字典key是1~5數字,value是這個數字的平方
d = {i:i**2 for i in range(1, 5)}
print(d)

輸出:
{1: 1, 2: 4, 3: 9, 4: 16}

情形1. 兩個列表元素數量相同,統計任何一個list長度都可以
(list後期有可能變化,所以不用具體數目,用len)

# 將列表ls1,ls2合併為一個字典
ls1 = ["name", "age", "gender"]
ls2 = ["Tom", 20, "male"]

d2 = {ls1[i]:ls2[i] for i in range(len(ls1))}
d3 = {ls1[i]:ls2[i] for i in range(len(ls2))}
print(d2)

輸出:
{'name': 'Tom', 'age': 20, 'gender': 'male'}
{'name': 'Tom', 'age': 20, 'gender': 'male'}

情形2. 兩個列表元素數量不同,len統計元素多的,dict會報錯
(list後期有可能變化,所以不用具體數目,用len)

# 將列表ls1,ls2合併為一個字典
ls1 = ["name", "age", "gender", "id"]
ls2 = ["Tom", 20, "male"]

d2 = {ls1[i]:ls2[i] for i in range(len(ls1))}
print(d2)
輸出:IndexError: list index out of range

d3 = {ls1[i]:ls2[i] for i in range(len(ls2))}
print(d3)
輸出:{'name': 'Tom', 'age': 20, 'gender': 'male'}

情形3. 快速提取目標資料

counts = {"a": 10, "b": 35, "c": 89, "d": 42}
# 需求:提取上述abcd中,分數大於40的資料

d = {k:v for k, v in counts.items() if v >= 40}
print(d)

輸出:{'c': 89, 'd': 42}

五、小結

作用:簡化程式碼
列表推導式作用:建立一個有規律的列表或控制一個有規律列表
集合推導式作用:建立一個有規律的集合或控制一個有規律集合,同時去重
字典推導式作用:快速合併list為dict,或提取字典中的目標資料

推導式寫法:

# 列表推導式
[xx for xx in range()]
# 集合推導式
{xx for ... in...}
# 字典推導式
{xx1:xx2 for ... in...}

PS: source, bilibili