Python中list的append与extend方法返回None的原因解析
为什么列表的append/extend方法返回None?
嘿,这是Python里非常常见的新手困惑,我来给你掰扯清楚~
首先得明白Python里列表的一个核心设计:像append、extend、sort、reverse这类方法,都是「原地修改」原列表,它们的作用是直接改变你调用它们的那个列表对象,而不是创建一个新的列表返回给你。为了明确告诉你“我没返回新东西,只是改了原列表”,这些方法的返回值就设成了None。
那回到你的代码,我们逐行拆解:
def main(): x = ['a','b','c','d','e'] y = ['v','w','x','y','z'] z1 = x.append(y) z2 = x.extend(y) print(z1) print(z2) main()
x.append(y):这行代码会把整个y列表作为一个单独元素,添加到x的末尾——x本身已经被修改了,但append方法不会把修改后的x返回给你,所以z1拿到的就是None。x.extend(y):这行是把y里的每个元素逐个加到x的末尾,同样x被修改了,但extend也返回None,所以z2也是None。
那怎么拿到修改后的列表呢?分两种情况处理:
1. 允许修改原列表
直接用修改后的原列表就行,因为它已经是你想要的结果了:
def main(): x = ['a','b','c','d','e'] y = ['v','w','x','y','z'] x.append(y) print(x) # 这里打印的就是append后的x x.extend(y) print(x) # 这里是extend后的x main()
2. 不想修改原列表,要新的列表
那你得先复制原列表,再对复制后的列表操作:
def main(): x = ['a','b','c','d','e'] y = ['v','w','x','y','z'] # 复制x,生成新列表 z1 = x.copy() z1.append(y) print(z1) # 输出 ['a','b','c','d','e', ['v','w','x','y','z']] z2 = x.copy() z2.extend(y) print(z2) # 输出 ['a','b','c','d','e', 'v','w','x','y','z'] main()
总结一下:Python里的原地修改类列表方法都返回None,要获取修改后的列表,要么直接用被修改的原列表,要么先复制再操作~
内容的提问来源于stack exchange,提问作者blueMango
相关产品推荐
相关产品推荐

