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

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

def trans(m):

a = [[] for i in m[0]]

for i in m:

for j in range(len(i)):

a[j].append(i[j])

return a

m = [[1, 2], [3, 4], [5, 6]] # 想象第一个列表是原始的,后面的是往里添加的

print trans(m) # result:[[1, 3, 5], [ 2, 4, 6]]

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

仔细看了一下m这种结构。等等,这不是字典的iteritems()的结果么?如果dict(m),那么结果——不就是keys()和values()么?

于是利用字典转换一下:

def trans(m):

d = dict(m)

return [d.keys(), d.values()]

可是再仔细想想,这里面有bug。如果添加列表的第一个元素相同,也就是转化之后dict的key相同,那肯定就不行了呀!况且,如果原始列表不是两个,而是多个,肯定不能用字典的呀!于是这种方法作罢,还是好好看看列表的形状。

然后又是一个不小心的发现:

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

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

def trans(m):

for i in range(len(m)):

for j in range(i):

m[i][j], m[j][i] = m[j][i], m[i][j]

return m

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

print trans(m)

其实还是有点bug的,看起来是好用的,然而这个矩阵要求行列长度相同才行。

最后,群里某大神说:如果只是转置矩阵的话,直接zip就好了。这才想起来zip的本质就是这样的,取出列表中的对应位置的元素,组成新列表,正是这个题目要做的。

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

def trans(m):

return list(zip(*m))

没错,就这么简单。python的魅力。

python3 中zip()函数

zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象,这样做的好处是节约了不少的内存。

我们可以使用 list() 转换来输出列表。

如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。

zip 方法在 Python 2 和 Python 3 中的不同:在 Python 3.x 中为了减少内存,zip() 返回的是一个对象。如需展示列表,需手动 list() 转换。

如果需要了解 Pyhton3 的应用,可以参考 Python3 zip()。

语法

zip 语法:

zip([iterable,...])

参数说明:

iterabl -- 一个或多个迭代器;

返回值

返回元组列表。

实例

以下实例展示了 zip 的使用方法:

>>>a= [1,2,3]>>> b= [4,5,6]>>> c= [4,5,6,7,8]>>> zipped= zip(a,b)# 打包为元组的列表[(1, 4), (2, 5), (3, 6)]>>> zip(a,c)# 元素个数与最短的列表一致[(1, 4), (2, 5), (3, 6)]>>> zip(*zipped)# 与 zip 相反,*zipped 可理解为解压,返回二维矩阵式[(1, 2, 3), (4, 5, 6)]

python3中zip函数_用python实现矩阵转置,python3 中zip()函数相关推荐

  1. python一些常用函数_【python】常用的一些内置函数

    1.cmp cmp(A,B)函数,比较A,B的大小,如果A大于B,返回1,A小于B返回-1,A等于B返回0 print cmp(12,33) >>>-1 print cmp(&quo ...

  2. python strptime函数_关于python:datetime.strptime不接受自定义函数传递的参数

    我正在尝试创建一个可重用的def函数,以将熊猫数据框列中的儒略日期转换为格里高利风格的日期. 使用该函数时,出现TypeError:strptime()参数1必须是str,而不是Series. imp ...

  3. python avg函数_学习python第三天之多行函数

    多行函数:(聚合函数/分组函数) 解释:多条数据进入,单条结果出来(多进单出) 1).max(obj):最大值 2).min(obj):最小值 3).sum(num):求和 4).avg(num):求 ...

  4. python中matrix函数_使用python解线性矩阵方程(numpy中的matrix类)

    这学期有一门运筹学,讲的两大块儿:线性优化和非线性优化问题.在非线性优化问题这里涉及到拉格朗日乘子法,经常要算一些非常变态的线性方程,于是我就想用python求解线性方程.查阅资料的过程中找到了一个极 ...

  5. python 数据比对 函数_用python比对csv文件中的数据

    做了个问卷,下载了收集数据xlsx文件,把数据弄到另一个表格文件中,需要校验数据转移的准确性. 使用python的csv库,使用csv.reader(f)函数读取表格数据,转成列表,确定数据行的主键, ...

  6. python提取excel表中的数据_用python从excel工作表中提取和操作数据

    场景:我正在尝试编写一个python代码,它读取给定文件夹中的所有工作簿,获取每个工作簿的数据并将其放入单个数据帧中(每个工作簿都成为一个数据框,因此我可以单独操作它们).在 问题1:对于此代码,即使 ...

  7. python怎么统计文本中的字频_【python】实现文档中的多频词统计

    案例:三国小说主要人物出场频率统计 首先导入必要的模块: import jieba from collections import Counter from wordcloud import Word ...

  8. python画点的函数_【Python】matplotlib绘图 - scatter、plot函数画离散点(带有边线)...

    matplotlib更新之后发现默认的scatter函数绘制的离散点不带有边框.查阅相关文档之后发现需要对其中的参数进行设置. 官方手册:https://matplotlib.org/api/_as_ ...

  9. python 搜索pdf文件中的文字_使用python查找pdf文档中搜索字符串位于哪一页

    我终于发现pyPDF可以帮上忙.我把它寄出去,以防它能帮助别人. (1)定位字符串的函数def fnPDF_FindText(xFile, xString): # xfile : the PDF fi ...

最新文章

  1. 常考数据结构与算法:进制转换
  2. linux 创建crontab文件位置,linux - 如何通过脚本创建crontab - Ubuntu问答
  3. DCMTK:使用dcmimage 库将DICOM图像转换为PPM或PGM
  4. c++fibonacci search斐波那契搜索的实现算法(附完整源码)
  5. 这里有一份面筋请查收(二)
  6. 【大牛疯狂教学】mysqlinnodb和myisam
  7. spark广播变量 和 累加器
  8. 使用jackson对Java对象与JSON字符串相互转换的一些总结
  9. 数据 3 分钟 | ShardingSphere 核心团队获融资、巨杉数据库发布湖仓一体架构多款产品...
  10. 深度学习下,中文分词是否还有必要?——ACL 2019论文阅读笔记
  11. “超级买手”阿里:一年投资65笔,涉及金额高达5400亿
  12. 【clion】实现类似自定义代码自动补全的功能(懒人利器)
  13. linux镜像下载和vmware虚拟主机部署
  14. Qt QTouchEvent 多点触控
  15. express静态文件
  16. 在rhel7.3中编译和使用log4cxx
  17. android接口回调!为什么有人说Android开发不再吃香?内含福利
  18. 淘淘商城---8.7
  19. 偶遇 防火墙,IDS,IPS三个老兄争吵
  20. 差分近似图像导数算子之Sobel算子

热门文章

  1. 多部民族电影在移动电影院App首映发布成功
  2. 数据结构之有效的括号
  3. 记录93年男孩日常消费网店收入
  4. IT英语中英文对照:著名的软件产品
  5. C#登录拍拍,总是提示输入有误
  6. 巧用网络分析仪的校准
  7. 恒瑞、百济之外,再鼎开辟了中国医药创新又一极
  8. php生成随机姓名,PHP随机生成中国人姓名的类
  9. 用 InstallShieldX 做教育片的安装
  10. mysql语句总结_mysql语句总结