You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何在返回表达式中使用.extend()方法会返回None且失效?

列表移零练习中的.extend()返回None问题

我在做将列表所有零移至末尾的练习,试了几种可行方案,但我认为最具Python风格的、用.extend()的写法却失效,返回了None。

可行写法1

my_list = [0, 0, 1, 2, 3, 0, 4, 5, 6, 0, 7, 8, 9, 0]

def move_zeros(my_list):
    l = [x for x in my_list if x != 0]
    z = [y for y in my_list if y == 0]
    l.extend(z)
    return l

print(move_zeros(my_list))

可行写法2

def move_zeros(my_list):
    l = [x for x in my_list if x != 0]
    l.extend([y for y in my_list if y == 0])
    return l

print(move_zeros(my_list))

失效写法(返回None)

def move_zeros(my_list):
    l = [x for x in my_list if x != 0].extend([y for y in my_list if y == 0])
    return l

print(move_zeros(my_list))

问题原因

Python里列表的.extend()方法是原地修改列表,它本身的返回值是None。失效写法里把.extend()的返回值直接赋值给了变量l,所以l就变成了None。而前两种写法是先创建好非零元素的列表,再调用.extend()修改这个列表(不需要接收返回值),最后返回修改后的列表,所以能正常得到结果。

内容的提问来源于stack exchange,提问作者Diego C.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 09:33:11