找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 3901|回复: 8

[求助] 如何理解这个列表解析,请教高手

1

主题

3

帖子

3

积分

贫民

积分
3
马尔代夫 发表于 2018-4-19 12:33:12 | 显示全部楼层 |阅读模式
L = [1]
L = [L.append(i+1) for i in L if i<10]
print(L)

输出结果:
[None, None, None, None, None, None, None, None, None]


------------------
(program exited with code: 0)

请按任意键继续. . .

回复

使用道具 举报

0

主题

2

帖子

2

积分

贫民

积分
2
UTF8 发表于 2018-4-27 19:16:28 | 显示全部楼层
不知理解对错,  错的话望指正。L.append(i+1) 值为None,每次循环都在L上Append一个i+1,因此最终循环调用L.append(i+1) ,生成的列表L为[1,2,3,4,5,6,7,8,9]  临时列表为[None, None, None, None, None, None, None, None, None],最后将临时列表赋值给L,从而得到上面的输出结果.
回复 支持 3 反对 0

使用道具 举报

0

主题

1

帖子

1

积分

贫民

积分
1
daletxt 发表于 2018-8-28 11:59:01 | 显示全部楼层
楼上思路基本正确,补充一点,python的list.append()函数是没有返回值的,所以L.append(i+1)值为None。
纠正一点,生成的L列表为[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],包括初始的1.而临时列表None有9个,即i的循环次数9次,1-9。
L = [1]
[L.append(i+1) for i in L if i<10]
print(L)
即可看到输出:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
回复 支持 1 反对 0

使用道具 举报

1

主题

3

帖子

3

积分

贫民

积分
3
马尔代夫  楼主| 发表于 2018-9-2 08:48:22 | 显示全部楼层
UTF8 发表于 2018-4-27 19:16
不知理解对错,  错的话望指正。L.append(i+1) 值为None,每次循环都在L上Append一个i+1,因此最终循环调用 ...

非常感谢,明白了!
回复 支持 反对

使用道具 举报

1

主题

3

帖子

3

积分

贫民

积分
3
马尔代夫  楼主| 发表于 2018-9-2 09:32:06 | 显示全部楼层
daletxt 发表于 2018-8-28 11:59
楼上思路基本正确,补充一点,python的list.append()函数是没有返回值的,所以L.append(i+1)值为None。
纠 ...

谢谢解答,理解了!
回复 支持 反对

使用道具 举报

0

主题

5

帖子

5

积分

贫民

积分
5
xd96dx 发表于 2019-9-29 14:38:30 | 显示全部楼层
么得返回值
回复 支持 反对

使用道具 举报

0

主题

1

帖子

1

积分

贫民

积分
1
woshixinshou 发表于 2020-1-6 19:42:43 | 显示全部楼层
你们都还有些错误,L最初只是只有一个元素的列表,第一次遍历i=1,append使L动态增加,使遍历继续,i<10是条件,在这过程中L变程[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],但是为什么是9个None,因为第10次遍历没有运行,第十次 i=10,i<10显然是错的,所以只遍历了9次。因为L.append(i+1)没有返回值 所以此时的生成式每次遍历的结果都是None,遍历了9次就是9个None,生成式完成后把值赋给了L所以最后改变了L的值,在没有赋值之前L和生成式列表是没什么关系的,大家可以用一个M去接收一下,然后打印M和L就一目了然了。
回复 支持 反对

使用道具 举报

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

本版积分规则

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