1. 程式人生 > 其它 >速戰速決 Python - python 高階: 推導式,zip

速戰速決 Python - python 高階: 推導式,zip

速戰速決 Python - python 高階: 推導式,zip

速戰速決 Python https://github.com/webabcd/PythonSample
作者 webabcd

速戰速決 Python - python 高階: 推導式,zip

示例如下:

advanced/comprehension.py

# comprehension 推導式
# 一種簡單的“把一個或多個列表或集合或字典通過指定的規則生成一個新的列表或集合或字典”的方法

a = [1, 2, 3, 4, 5]
b = {1, 2, 3, 4, 5}
c = {"k1":1, "k2":2, "k3":3, "k4":4, "k5":5}

# 取出列表 a 中的偶數,並生成一個新的列表
d = [x for x in a if x % 2 == 0]
# 取出集合 b 中的偶數,並生成一個新的集合
e = {x for x in b if x % 2 == 0}
# 取出字典 c 中的 value 為偶數的 k/v,並生成一個新的字典
f = {k:v for k,v in c.items() if v % 2 == 0}
print(d) # [2, 4]
print(e) # {2, 4}
print(f) # {'k2': 2, 'k4': 4}

# 通過巢狀迴圈生成一個元組列表
g = [(x,y) for x in range(2) for y in range(3)] 
print(g) # [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2)]

# 通過巢狀迴圈生成一個元組列表,同時指定規則
h = [(x,y) for x in range(2) if x % 2 == 0 for y in range(3) if y % 2 == 0] 
print(h) # [(0, 0), (0, 2)]

# 通過巢狀迴圈生成一個字典
i = {f"k{x}_{y}":f"v{x}_{y}" for x in range(2) for y in range(3)}
print(i) # {'k0_0': 'v0_0', 'k0_1': 'v0_1', 'k0_2': 'v0_2', 'k1_0': 'v1_0', 'k1_1': 'v1_1', 'k1_2': 'v1_2'}

# 通過巢狀推導式生成一個二維列表
j = [[0 for col in range(2)] for row in range(3)] # 推導式也是可以巢狀的
print(j) # [[0, 0], [0, 0], [0, 0]]

# 可以在推導式中使用函式
def plus(a, b):
    return a + b
k = [plus(x,y) for x in range(2) for y in range(3)] 
print(k) # [0, 1, 2, 1, 2, 3]

advanced/zip.py

# zip - 將多個可迭代物件壓縮為一個可迭代物件,將一個可迭代物件解壓縮為多個可迭代物件

a = [1, 2, 3]
b = [4, 5, 6]


# 將多個可迭代物件壓縮為一個可迭代物件(把多個可迭代物件的相同索引位置的資料取出來,並組成新的可迭代物件的元素)
c = zip(a, b) 
d = list(c)
print(c) # 一個 zip 物件
print(d) # [(1, 4), (2, 5), (3, 6)]


# 將一個可迭代物件解壓縮為多個可迭代物件(把一個可迭代物件的每個元素的相同索引位置的資料取出來,並分別組成多個可迭代物件)
e, f = zip(*[[1, 4], [2, 5], [3, 6]])      
print(e) # (1, 2, 3)
print(f) # (4, 5, 6)

g, h = zip(*([1, 4], [2, 5], [3, 6]))      
print(g) # (1, 2, 3)
print(h) # (4, 5, 6)

i, j = zip(*[(1, 4), (2, 5), (3, 6)])      
print(i) # (1, 2, 3)
print(j) # (4, 5, 6)

速戰速決 Python https://github.com/webabcd/PythonSample
作者 webabcd