为何在返回表达式中使用.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.
相关产品推荐
相关产品推荐

