Python用for循环与列表推导式追加列表元素后者返回None是什么原因?
问题原因
list.append() 是原地修改列表的方法,本身没有返回值,执行完成后默认返回None,这是你得到全None列表的核心原因。
两种写法的逻辑差异:
- 第一段for循环的逻辑是正确的:先初始化空列表
x,每次循环调用x.append()往x中追加元素,最后打印x本身,得到的就是追加完成后的字符串列表。 - 第二段列表推导式的用法完全不符合设计逻辑:列表推导式的作用是直接生成新列表,会把你写在推导式头部的表达式的计算结果,逐个收集为新列表的元素。你现在把
x.append('hi'+str(i))放在推导式头部,相当于把每次append的返回值(也就是None)全部收集起来组成了新列表,还把这个全None的新列表直接赋值给了x,覆盖了原来的空列表,自然得不到你要的结果。
正确的列表推导式写法
你完全不需要在推导式里调用append,直接写要生成的元素内容即可:
x = ['hi' + str(i) for i in range(0, 10)] # 也可以用f-string简化写法:x = [f'hi{i}' for i in range(10)] print(x)
运行后就能得到和for循环版本完全一致的结果。
内容的提问来源于stack exchange,提问作者zlk2000
相关产品推荐
相关产品推荐

