鱼C论坛

 找回密码
 立即注册
查看: 4797|回复: 19

[已解决]列表课后习题

[复制链接]
发表于 2022-8-30 19:19:48 From FishC Mobile | 显示全部楼层 |阅读模式
5鱼币
>>> matrix = [[1, 2, 3, 4],
...           [5, 6, 7, 8],
...           [9, 10, 11, 12]]
>>> Tmatrix = [[row[i] for row in matrix] for i in range(4)]
>>> Tmatrix
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
行列的转换不理解
row【i】的意思是每一行吗,怎么就变成列了
最佳答案
2022-8-30 19:19:49
本帖最后由 编程追风梦 于 2022-8-31 11:09 编辑
刚才没说清楚,具体解释一下哈:
有列表如下:
matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
行换列后的结构如下
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

怎么做到的呢?有三种方法
方法一:嵌套的列表推导式
>>> matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
>>> [[row[col] for row in matrix] for col in range(len(matrix[0]))]
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
>>>
原理很简单:先循环列,在固定列上循环每一行

方法二:zip迭代 + map映射
咱们先分下类哈:
在python2中:
>>> matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
>>> map(list, zip(*matrix))
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
>>>
>>> matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
>>> list(map(list, zip(*matrix)))
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
>>>
原理也很清晰:先用zip并行送代每一个列表元素,然后再用map讲结果中的元组转成列表
顺便说一下,row【i】是每一行里面的元素


给我设个最佳答案吧,谢谢啦,不喜勿喷


最佳答案

查看完整内容

本帖最后由 编程追风梦 于 2022-8-31 11:09 编辑 刚才没说清楚,具体解释一下哈: 有列表如下: 行换列后的结构如下 怎么做到的呢?有三种方法 方法一:嵌套的列表推导式 原理很简单:先循环列,在固定列上循环每一行 方法二:zip迭代 + map映射 咱们先分下类哈: 在python2中: 原理也很清晰:先用zip并行送代每一个列表元素,然后再用map讲结果中的元组转成列表 顺便说一下,row【i】是每一行里面的元素 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-30 19:19:49 | 显示全部楼层    本楼为最佳答案   
本帖最后由 编程追风梦 于 2022-8-31 11:09 编辑
刚才没说清楚,具体解释一下哈:
有列表如下:
matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
行换列后的结构如下
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

怎么做到的呢?有三种方法
方法一:嵌套的列表推导式
>>> matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
>>> [[row[col] for row in matrix] for col in range(len(matrix[0]))]
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
>>>
原理很简单:先循环列,在固定列上循环每一行

方法二:zip迭代 + map映射
咱们先分下类哈:
在python2中:
>>> matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
>>> map(list, zip(*matrix))
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
>>>
>>> matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
>>> list(map(list, zip(*matrix)))
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
>>>
原理也很清晰:先用zip并行送代每一个列表元素,然后再用map讲结果中的元组转成列表
顺便说一下,row【i】是每一行里面的元素


给我设个最佳答案吧,谢谢啦,不喜勿喷


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-30 20:54:31 | 显示全部楼层
row【i】 是行中的每个元素。

评分

参与人数 1贡献 +2 收起 理由
python爱好者. + 2 鱼C有你更精彩^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-31 07:12:01 | 显示全部楼层
小甲鱼的要求就是要把第1行变成第1列,第2行变成第2列......
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-31 09:05:12 | 显示全部楼层
我也有同样的问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-31 10:59:31 | 显示全部楼层
我来回答一下,你给我设个最佳答案呗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-31 11:02:06 | 显示全部楼层
编程追风梦 发表于 2022-8-31 10:59
我来回答一下,你给我设个最佳答案呗
arr = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
 
#方法1
ar2 =[]
for i in range(len(arr[0])):
    b =[]
    for j in range(len(arr)):
        b.append(arr[j][i])
    ar2.append(b)
print(ar2)
 
#方法2
ar2 = list(map(list,zip(*arr)))
print(ar2)
 
#方法3
ar2 = [ [row[i] for row in arr] for i in range(len(arr[0])) ]
print(ar2)
这三种方法看一下

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
hyjhyj + 5 + 5 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-31 11:10:25 | 显示全部楼层
编程追风梦 发表于 2022-8-31 11:08
本帖最后由 编程追风梦 于 2022-8-31 11:09 编辑

刚才没说清楚,具体解释一下哈:

@python爱好者.  我说的对吗?请教一下,啊趁楼主没看到之前,如果不对赶紧告诉我
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-31 12:04:42 | 显示全部楼层
编程追风梦 发表于 2022-8-31 11:10
@python爱好者.  我说的对吗?请教一下,啊趁楼主没看到之前,如果不对赶紧告诉我

对是对,但是.......你确定楼主能理解?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-31 12:28:56 | 显示全部楼层
python爱好者. 发表于 2022-8-31 12:04
对是对,但是.......你确定楼主能理解?

楼主不是说不明白吗?所以我就........应该能理解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-31 12:29:49 | 显示全部楼层
python爱好者. 发表于 2022-8-31 12:04
对是对,但是.......你确定楼主能理解?

有最佳答案就行(不负责任的微笑
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-31 12:31:06 | 显示全部楼层
python爱好者. 发表于 2022-8-31 12:04
对是对,但是.......你确定楼主能理解?

那个人就回了row【i】是行中的每个元素 你就给了两个贡献?
那楼主应该给我最佳答案+1000贡献值

评分

参与人数 1贡献 +3 收起 理由
tommyyu + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-9-2 15:09:33 | 显示全部楼层
楼主,要是看不明白,可以尝试自己写for循环看下,我的解释如下
matrix = [[1, 2, 3, 4],
            [5, 6, 7, 8],
            [9, 10, 11, 12]]
# Tmatrix = [[row[i] for row in matrix] for i in range(4)]
# print(Tmatrix)
Tmatrix=[]
for i in range(4):
    print(f'获取子列表位置:{i}')
    Tmatrix1=[]#新的嵌套子列表
    for row in matrix:
        Tmatrix1.append(row[i])
    print(Tmatrix1)
    Tmatrix.append(Tmatrix1)
print(f'新获取的列表:{Tmatrix}')

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
编程追风梦 + 1 + 1 新鱼油表现就这么好

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-9-3 08:50:08 | 显示全部楼层
wyh551202 发表于 2022-9-2 15:09
楼主,要是看不明白,可以尝试自己写for循环看下,我的解释如下:

也可以的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-9-3 10:20:25 | 显示全部楼层

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-9-4 18:00:33 | 显示全部楼层
第一行变列
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-9-4 21:02:48 From FishC Mobile | 显示全部楼层
这里是使用了列表推导式,所以变成了列表
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-9-4 21:03:32 From FishC Mobile | 显示全部楼层
你可以去查看关于这推导式的扩充知识
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-9-11 12:56:14 | 显示全部楼层
楼主不看达!
楼主怎么聊!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-9-12 19:57:08 | 显示全部楼层
谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-16 19:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表