zip矩陣轉至

永琪發表於2020-06-20
1 list01=[1,2,3,4]
2 list02=["a","b","c","d"]
3 
4 for itme in zip(list01,list02):
5     print(list(itme))

結果:

[1, 'a']
[2, 'b']
[3, 'c']
[4, 'd']

zip最簡單的用法“列對接”我們可以看到zip可以將列與列組合在一起

我在學習一些如2048等專案的時候會用到矩陣轉至思想的,但沒有zip的時候是很痛苦的,當有了zip的時候我們就可以這樣做:

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

for itme in zip(list01[0],list01[1],list01[2],list01[3]):
    list02.append(list(itme))
print(list02)

結果:

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

這樣就將之前的13行矩陣轉至程式碼簡化為3行:但這樣寫也是不夠靈活,當我們增加一行資料時程式碼有又需要改動:

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

for itme in zip(list01[0],list01[1],list01[2],list01[3],list01[4]):
    list02.append(list(itme))
print(list02)

有的同學會想到可變數引數化,這樣也是不可取的,這樣做程式碼有將變得臃腫,我們不如用拆包和裝包的思想:

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

for itme in zip(*list01):
    list02.append(list(itme))
print(list02)

當到這一步的時候我們就可以用Python的特色-----列表推導式

list01=[
    [1,2,3,4],
    [5,6,7,8],
    [9,8,7,4],
    [1,5,8,7]
]
list02=[list(itme) for itme in zip(*list01)]
print(list02)

結果:

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

 

相關文章