25

zip矩阵转至

 4 years ago
source link: http://www.cnblogs.com/yongqi-wang/p/13167991.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
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]]


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK