python 詳解zip函式的操作之資料重組

2021-08-14 15:13:00 字數 2833 閱讀 2285

zip()是python的乙個內建函式,它接受一系列可迭代的物件作為引數,將物件中對應的元素打包成乙個個tuple(元組),然後返回由這些tuples組成的list(列表)。若傳入引數的長度不等,則返回list的長度和引數中長度最短的物件相同。利用*號操作符,可以將list unzip(解壓)

1、生成的xyz是乙個zip物件

in [1]: x = [1, 2, 3]

...: y = [4, 5, 6]

...: z = [7, 8, 9]

...: xyz = zip(x, y, z)

#生成的xyz是乙個zip物件

in [2]: xyz

out[2]: 0x14120b9fac8>

#呼叫list函式將zip解析為列表,zip就是將每個列表每個對應同一位置新增在乙個元組裡面

in [3]: list(xyz)

out[3]: [(1, 4, 7), (2, 5, 8), (3, 6, 9)]

2、不對等列表的zip

#如果有不對等的列表zip一起的情況時,按照最短的列表進行zip組合

in [4]: h = [2,3,4,5]

in [5]: xyzh = zip(x,y,z,h)

in [6]: xyzh

out[6]: 0x14122b44f88>

#h列表中的最後乙個因為其他的列表沒有對應的位置匹配而捨去

in [7]: list(xyzh)

out[7]: [(1, 4, 7, 2), (2, 5, 8, 3), (3, 6, 9, 4)]

3、zip(*)是zip的逆過程

#zip(*)是zip的逆過程·

x = [1, 2, 3] #unzip過程 類似於zip的逆過程

y = [4, 5, 6]

z = [7, 8 ,9]

xyz = zip(x, y, z)

zyx = zip(*xyz) # *xyz 表示將xyz列表中的元素來zip,當xyz列表中存的是列表元素時,就是將列表元素來zip

print(list(zyx)) #xyz是:xyz=[[1, 4, 7], [2, 5, 8], [3, 6, 9]] zip(*xyz)=>zip([1, 2, 3],[4, 5, 6],[7, 8, 9])

4、二維矩陣變換(矩陣的行列互換)

#比如我們有乙個由列表描述的二維矩陣

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

# 通過python列表推導的方法,我們也能輕易完成這個任務

[[row[col] for row in a] for col in range(len(a[0]))]

#另外一種方法就是利用zip函式:

in [18]: list(zip(a[0],a[1],a[2]))

out[18]: [(1, 4, 7), (2, 5, 8), (3, 6, 9)]

in [20]: list(zip(*a))

out[20]: [(1, 4, 7), (2, 5, 8), (3, 6, 9)]

in [22]: list( map(list,zip(*a)))

out[22]: [[1, 4, 7], [2, 5, 8], [3, 6, 9]]

#這種方法速度更快但也更難以理解,將list看成tuple解壓,恰好得到我們「行列互換」的效果,再通過對每個元素應用list()函式,將tuple轉換為list

5、zip函式將字典反轉成列表形式

x =   

#以列表返回可遍歷的(鍵, 值) 元組陣列

in [26]: x.items()

out[26]: dict_items([('name', 'dh'), ('age', 18), ('id', 3306)])

in [27]: x = zip(x.values(),x.keys())

in [28]: x

out[28]: at

0x202ce13b248>

in [29]: list(x)

out[29]: [('dh', 'name'), (18, 'age'), (3306, 'id')]

6、zip生成列表的方法

#完成步驟 :

#1: [x]會生成乙個只有乙個x元素的列表

#2: [x]*2 列表元素*重複2次

#3: 那麼zip(* [x] * 2)則表示zip(x, x)

in [30]: x = [1, 2, 3, 4]

...: y = zip(* [x] * 2)

in [31]: y

out[31]: 0x202cef0ea88>

in [32]: list(y)

out[32]: [(1, 1), (2, 2), (3, 3), (4, 4)]

in [35]: list(zip(*[x]))

out[35]: [(1,), (2,), (3,), (4,)]

in [36]: list(zip(*[x]*2))

out[36]: [(1, 1), (2, 2), (3, 3), (4, 4)]

python中的zip 函式詳解

一 zip iterables 函式詳解 1 zip 函式的定義 2 zip 函式的用法 python 3 zip 函式單個引數 in 1 list1 1,2,3,4 in 2 tuple1 zip list1 in 3 type tuple1 out 3 zip in 4 list tuple1 ...

python中的zip 函式詳解

一 zip iterables 函式詳解 1 zip 函式的定義 從引數中的多個迭代器取元素組合成乙個新的迭代器 返回 乙個zip物件,其內部元素為元組 可以轉化成列表或元組 傳入引數 元組 列表 字典等迭代器 2 zip 函式的用法 當zip 函式中只有乙個引數時,zip iterable 從迭代...

Python中的Zip 函式

zip 函式用於將可迭代的物件作為引數,將物件中對應的元素打包成乙個個元組,然後返回由這些元組組成的列表。如果各個迭代器的元素個數不一致,則返回列表長度與最短的物件相同,利用 號操作符,可以將元組解壓為列表。zip 語法 zip iterable,引數說明 返回元組列表。以下例項展示了 zip 的使...