鱼C论坛

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

列表推导式求助

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

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

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

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


这个如何利用列表推导式进行表达?

  1. A = [A[i].reverse() for i in range(len(A))]
复制代码


使用以上列表推导式得出的结果是
  1. A [None, None, None]
复制代码

使用循环表达的结果是
  1. A [[7, 8, 9], [4, 5, 6], [1, 2, 3]]
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-12-12 18:30:13 | 显示全部楼层
楼主,你发错贴了,别人想帮你必须先支付 10 鱼币?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

哈哈哈哈哈哈哈哈
小甲鱼最新课程 -> https://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]],那么循环的代码应该是这样的:
  1. A = [[1,2,3],[4,5,6],[7,8,9]]
  2. for i in range(len(A)):
  3.         A[i].reverse()
  4. print(A)
复制代码

   对应的列表推导式应该是这样的:
  1. [A[i].reverse() for i in range(len(A))]
复制代码

    这里是不用赋值的,因为整个操作就是对列表A直接进行操作,赋值的话,结果是None,None,None了,但只要不是赋值给A,A的结果仍然是正确的,因为已经操作过了。
    其实上面的代码不用那么麻烦的,改成这样更精简:
  1. A = [[1,2,3],[4,5,6],[7,8,9]]
  2. for i in A:
  3.     i.reverse()
  4. print(A)
复制代码

    推导式:
  1. [i.reverse() for i in A]
复制代码

    随便问一下楼上付费了吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

  6. print(A)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-12 19:50:36 | 显示全部楼层
A = [A[i] for i in range(len(A))][::-1]
这样可以吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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


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

  2. A = [A[i][-i-1] for i in range(len(A))]

  3. 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,我就明白了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

如果只是反转的话,不需要列表推导式。A[::-1]就可以了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-30 23:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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