鱼C论坛

 找回密码
 立即注册
查看: 1276|回复: 7

列表推导式求助

[复制链接]
发表于 2021-12-12 18:23:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 13375002215 于 2021-12-12 19:27 编辑
A = [[1,2,3],
       [4,5,6],
       [7,8,9]]
for i in range(len(A)):
        A.reverse()

这个如何利用列表推导式进行表达?
A = [A[i].reverse() for i in range(len(A))]

使用以上列表推导式得出的结果是
A [None, None, None]
使用循环表达的结果是
A [[7, 8, 9], [4, 5, 6], [1, 2, 3]]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-12-12 18:30:13 | 显示全部楼层
楼主,你发错贴了,别人想帮你必须先支付 10 鱼币?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-12 19:24:18 | 显示全部楼层
傻眼貓咪 发表于 2021-12-12 18:30
楼主,你发错贴了,别人想帮你必须先支付 10 鱼币?

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

使用道具 举报

发表于 2021-12-12 19:31:08 | 显示全部楼层
    reverse()方法是将直接将列表反转,是没有返回值的,所以结果是None,一定要返回值,可以用list(reversed(A))。
    再有,你的代码看上去不到对哦,for i in range(len(A)),意思是A有多少元素就执行多少次循环,你这里是3次,3次A.reverse()等于1次A.reverse(),你这个for循环没什么意义,所以列表推导式也就没意义了。
    我猜你实际的题目应该是把列表里的列表反转过来,就是这样的结果:[[3, 2, 1], [6, 5, 4], [9, 8, 7]],那么循环的代码应该是这样的:
A = [[1,2,3],[4,5,6],[7,8,9]]
for i in range(len(A)):
        A[i].reverse()
print(A)
   对应的列表推导式应该是这样的:
[A[i].reverse() for i in range(len(A))]
    这里是不用赋值的,因为整个操作就是对列表A直接进行操作,赋值的话,结果是None,None,None了,但只要不是赋值给A,A的结果仍然是正确的,因为已经操作过了。
    其实上面的代码不用那么麻烦的,改成这样更精简:
A = [[1,2,3],[4,5,6],[7,8,9]]
for i in A:
    i.reverse()
print(A)
    推导式:
[i.reverse() for i in A]
    随便问一下楼上付费了吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2021-12-12 19:32:56 | 显示全部楼层
A = [[1,2,3],
       [4,5,6],
       [7,8,9]]
for i in range(len(A)):
        A[i].reverse() # 问题出现在这里

print(A)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-12 19:50:36 | 显示全部楼层
A = [A[i] for i in range(len(A))][::-1]
这样可以吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-13 11:34:41 | 显示全部楼层
本帖最后由 13375002215 于 2021-12-13 11:37 编辑
txxcat 发表于 2021-12-12 19:31
reverse()方法是将直接将列表反转,是没有返回值的,所以结果是None,一定要返回值,可以用list(revers ...


是要取从右上到左下的值,我自己是做出来了答案的。
A = [A[i-len(A)][-i-1] for i in range(len(A))]
或
A = [A[i][-i-1] for i in range(len(A))]
或
A = [A[i][-i-4] for i in range(-len(A),0)]

只是想看看还有没有其他方法。。因为想到reverse()可以将列表反转,所以用A[i].reverse()去将[[1,2,3],[4,5,6],[7,8,9]]反转成[[3,2,1],[6,5,4],[9,8,7]]这样,就可以通过A[i][i]直接取3,5,7出来。

你讲到的reverse()返回值是None,我就明白了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-13 11:38:55 | 显示全部楼层
孤独的小鸟 发表于 2021-12-12 19:50
A = [A for i in range(len(A))][::-1]
这样可以吗?

如果只是反转的话,不需要列表推导式。A[::-1]就可以了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-30 23:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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