python列表推导式2.0

本文介绍了如何使用Python的列表推导式来实现矩阵转置,通过简洁的代码展示了两种不同的实现方式,包括一种基于for循环的自定义实现和一种利用内置的zip及map函数的实现。强调理解列表推导式的逻辑,并讨论了列表追加操作中浅拷贝和深拷贝的概念。
摘要由CSDN通过智能技术生成

列表推导式实现矩阵转置的解析代码

上次解析的那个推导式还是过于简单,这次换点新的推导式。推导式怎么说呢,挺好用的,简洁,明不明了咱不说,因人而异啦。让代码更清晰,我觉得才是我所追求的,话不多说,直接先看代码。

matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
print([[row[i] for row in matrix] for i in range(4)])
# 输出[[1,5,9].[2,6,10],[3,7,11],[4,8,12]]

从上面看起来,列表推导式是真的很简洁,也算的上很清晰了,不过你可以看懂上面串推导式的话,下面这个你大致也不需要看下去了,没什么帮助,顶多你就是看一下我解析这串推导式的思路。

其实关于这个推导式,我们还可以使用python的内置函数来实现矩阵转置
(我个人认为嚯,能少用内置就少用内置,我个人喜欢实打实自己写出来的东西)

matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
list(map(list,zip(*matrix)))
# 输出和上面的输出一样

重头戏来了,开始解析

matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
aml, amt = [], []
for i in range(4):    # i做为索引
    for row in matrix:      # 循环列表输出,输出是一维的列表
        aml.append(row[i])  # 完空的列表aml里面添加元素
    amt.append(aml[:])
    aml.clear()

print(amt)

如上就是我个人思路的解析了,可能有人会不明白插入aml的时候为什么要加一个切片,首先我们必须知道,list.append()是往列表追加元素,如果你不加切片的话,你直接是amt.append(aml)的话,输出就是错误的,切片是让元素添加的时候按步骤来,一步一步走,新添加的元素不会干扰到旧的元素。其实这个就是一个浅拷贝和深拷贝的问题,这是很多语言都会有的问题,这里不细说了。(js的浅拷贝和深拷贝最为明显)。

这次写主要是看代码思路,很多时候不懂的时候,设置断点,慢慢看,不要,代码也就是看多了就懂了,看多了还不懂,那就算了吧,不要勉强自己了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值