有个朋友提出了一个问题:手头上现在有一个二维列表,比如[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]],现在要把该二维列表变成为[[1, 4, 7, 10], [2, 5, 8, 11], [3, 6, 9, 12]]。

其实不动脑筋的话,用二重循环很容易写出来:

#! /usr/bin/env python3
# -*- coding:utf-8 -*- # Author : mayi
# Blog : http://www.cnblogs.com/mayi0312/
# Date : 2019/4/26
# Name : test01
# Software : PyCharm
# Note : 用于实现实现矩阵(二重列表)转置 def trans(l):
a = [[] for i in l[0]]
for i in l:
for j in range(len(i)):
a[j].append(i[j]) return a # 主函数
def main():
l1 = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]] l2 = trans(l1)
print(l1) # [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]
print(l2) # [[1, 4, 7, 10], [2, 5, 8, 11], [3, 6, 9, 12]] # 入口函数
if __name__ == '__main__':
main()

然而不管怎么看这种代码都很丑。

如上图:这种转置矩阵的即时感是怎么回事?

没错,这个问题的本质就是求解转置矩阵。于是就简单了,还是用个不动脑筋的办法:

#! /usr/bin/env python3
# -*- coding:utf-8 -*- # Author : mayi
# Blog : http://www.cnblogs.com/mayi0312/
# Date : 2019/4/26
# Name : test01
# Software : PyCharm
# Note : 用于实现实现矩阵(二重列表)转置 def trans(l):
for i in range(len(l)):
for j in range(i):
l[i][j], l[j][i] = l[j][i], l[i][j] return l # 主函数
def main():
l1 = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] l2 = trans(l1)
print(l1) # [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(l2) # [[1, 4, 7], [2, 5, 8], [3, 6, 9]] # 入口函数
if __name__ == '__main__':
main()

其实上面代码还是有点bug,看起来是好用的,然而用这种方法矩阵要求行列长度相同才行。

最后,我们想起了zip。zip的本质就是这样的,取出列表中的对应位置的元素,组成新列表,正是这个题目要做的。

所以最终,这个题目(转置矩阵)的Python解法就相当奇妙了:

#! /usr/bin/env python3
# -*- coding:utf-8 -*- # Author : mayi
# Blog : http://www.cnblogs.com/mayi0312/
# Date : 2019/4/26
# Name : test01
# Software : PyCharm
# Note : 用于实现实现矩阵(二重列表)转置 def trans(l):
l = zip(*l)
l = [list(i) for i in l] return l # 主函数
def main():
l1 = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]] l2 = trans(l1)
print(l1) # [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]
print(list(l2)) # [[1, 4, 7, 10], [2, 5, 8, 11], [3, 6, 9, 12]] # 入口函数
if __name__ == '__main__':
main()

Python - 实现矩阵转置的更多相关文章

  1. 用python实现矩阵转置

    前几天群里有同学提出了一个问题:手头现在有个列表,列表里面两个元素,比如[1, 2],之后不断的添加新的列表,往原来相应位置添加.例如添加[3, 4]使原列表扩充为[[1, 3], [2, 4]],再 ...

  2. 用python实现矩阵转置,python3 中zip()函数

    前几天群里有同学提出了一个问题:手头现在有个列表,列表里面两个元素,比如[1, 2],之后不断的添加新的列表,往原来相应位置添加.例如添加[3, 4]使原列表扩充为[[1, 3], [2, 4]],再 ...

  3. [转]Python中的矩阵转置

    Python中的矩阵转置 via 需求: 你需要转置一个二维数组,将行列互换. 讨论: 你需要确保该数组的行列数都是相同的.比如: arr = [[1, 2, 3], [4, 5, 6], [7, 8 ...

  4. 关于python中矩阵的实现和矩阵的转置

    python中矩阵的实现是靠序列,,, 序列有很多形式, 其实矩阵是现实生活中的东西,把现实生活中的结构转换到程序中. 就需要有个实现的方法,而这种路径是多种多样的. 下面给出一个把矩阵转换成pyth ...

  5. Python小代码_5_二维矩阵转置

    使用列表推导式实现二维矩阵转置 matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]] print(matrix) matrix_t = [[ro ...

  6. python 矩阵转置

    arrA=[[,,,],[,,,],[,,,],[,,,]] N= #声明4x4数组arr arrB=[[None] * N for row in range(N)] print('[原设置的矩阵内容 ...

  7. B-线性代数-矩阵转置

    [TOC] 更新.更全的<机器学习>的更新网站,更有python.go.数据结构与算法.爬虫.人工智能教学等着你:https://www.cnblogs.com/nickchen121/ ...

  8. <矩阵的基本操作:矩阵相加,矩阵相乘,矩阵转置>

    //矩阵的基本操作:矩阵相加,矩阵相乘,矩阵转置 #include<stdio.h> #include<stdlib.h> #define M 2 #define N 3 #d ...

  9. 【异构计算】OpenCL矩阵转置

    介绍 矩阵转置,主要的技巧还是利用好local memory ,防止local memory,以及glabol memory的读取尽量是合并读写. 完整代码一: main.cpp代码 #include ...

随机推荐

  1. 最强PHP防镜像代码收集,简单粗暴...你值得拥有

    JS版本 <script type="text/javascript"> if(location.toString().indexOf("yuanzhumub ...

  2. Kibana 学习资料

    Kibana 学习资料 网址 Kibana 官方文档 https://s0www0elastic0co.icopy.site/guide/en/kibana/current/introduction. ...

  3. JMeter5.1开发JDBC协议接口脚本

    配置 qzcsbj是连接池名称 jdbc:mysql://localhost:3306/qzcsbj?useUnicode=true&characterEncoding=utf8&al ...

  4. python基础之函数重点

    函数的返回值 现在有一个需求,比较两个人的月薪,然后想获取月薪较大人的年薪. 如果需要在程序中拿到函数的处理结果做进一步的处理,则需要函数必须要有返回值. 需要注意的是: return是一个函数结束的 ...

  5. [PHP] 一个免费、开源的基于tp5+layui2.1.5开发的快速开发框架

    推荐 一个免费.开源的基于tp5+layui2.1.5开发的快速开发框架,既可以用来学习,也可以用来实际项目的快速开发: 码云下载:https://gitee.com/eduaskcms/eduask ...

  6. Kafka Rebalance机制分析

    什么是 Rebalance Rebalance 本质上是一种协议,规定了一个 Consumer Group 下的所有 consumer 如何达成一致,来分配订阅 Topic 的每个分区. 例如:某 G ...

  7. TDD具体实施过程,可以看作两个层次

    在代码层次,在编码之前写测试脚本,可以称为单元测试驱动开发(Unit Test Driven Development,UTDD) 在业务层次,在需求分析时就确定需求(如用户故事)的验收标准,即验收测试 ...

  8. wordpress nginx详细环境配置安装命令和相关问题解决

    很详细的有关WordPress和nginx的环境配置安装操作步骤 指南,适合新手一步步按照命令操作安装WordPress并运行在生产环境中. 操作步骤转载自: Heap Stack blog(ping ...

  9. 二维码解析(编译zxing-cpp)

    二维码解析使用的类库是zxing(官网 https://github.com/zxing/zxing). 这个类库是谷歌的,原来有c++版本,后来的更新去掉了,zxing介绍了目前基于zxing的其他 ...

  10. centos虚拟机扩展磁盘空间(经历无数坑,血一样总结,史上最全)

    第一步 在vmware中将虚拟机关机后,鼠标右键设置,直接点击扩展加自己想要扩展的数量就可以了,这个比较简单不多说. 2 第二步 设置后进系统查看空间大小变化,实际并没有什么变化,我用的命令是df - ...