有个朋友提出了一个问题:手头上现在有一个二维列表,比如[[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. python基础之三:int、bool、str

    一.数据类型之整型的函数使用 i = print("该整型数字所占有效比特位的长度是:%d" % i.bit_length()) print(i.to_bytes(, " ...

  2. NetworkManager需要与不需要

    需要: 1.nmcli配置网络 不需要: 1.   ifcfg-eth1:0(网卡的子接口配置文件)生效

  3. django -- 实现ORM登录

    前戏 上篇文章写了一个简单的登录页面,那我们可不可以实现一个简单的登录功能呢?如果登录成功,给返回一个页面,失败给出错误的提示呢? 在之前学HTML的时候,我们知道,网页在往服务器提交数据的时候,都是 ...

  4. iptables 常用处理动作

    在iptables中,-j 参数用来指定要进行的处理动作,常用的处理动作包括:ACCEPT.REJECT.DROP.REDIRECT.MASQUERADE.LOG.DNAT.SNAT.MIRROR.Q ...

  5. JavaScript插件开发

    一.前言 通过 "WWW" 原则我们来了解 JavaScript 插件这个东西 第一个 W "What" -- 是什么?什么是插件,我就不照搬书本上的抽象概念了 ...

  6. 经典算法(六) simhash

    参考文档: simhash算法原理及实现:https://blog.csdn.net/chenguolinblog/article/details/50830948

  7. 【Activiti学习之五】BPMN事件

    环境 JDK 1.8 MySQL 5.6 Tomcat 7 Eclipse-Luna activiti 6.0 一.事件定义1.定时器事件(1)timeDate:指定时间触发<timerEven ...

  8. 【原创】在windows下使用xampp搭建phpcms v9

    我的操作环境: 操作系统:windows 7       64 位操作系统(有点古老,哈哈) 1.下载php环境和phpcmsv9源代码:phpcms v9 的源码:phpcms_v9.5.10_UT ...

  9. NET Core3前后端分离开发框架

    NET Core前后端分离快速开发框架 https://www.cnblogs.com/coldairarrow/p/11870993.html 引言 时间真快,转眼今年又要过去了.回想今年,依次开源 ...

  10. Maven 教程(14)— Maven聚合与继承

    原文地址:https://blog.csdn.net/liupeifeng3514/article/details/79553011 1.Maven聚合 我们在平时的开发中,项目往往会被划分为好几个模 ...