Python中打印列表extend操作赋值结果为None的原因
问题原因
打印变量val得到None的核心原因是:Python列表的extend()是原地修改方法,这类方法不会返回修改后的对象,默认返回值就是None。
代码执行逻辑拆解
逐行运行对应代码时,变量变化过程如下:
- 初始状态:
nums = [1,2,3,4,5],k=3,lst = [] - 3次循环执行完成后:
- 每次弹出
nums尾部元素追加到lst,最终lst = [5,4,3] - 弹出3个尾部元素后,剩余
nums = [1,2]
- 每次弹出
- 执行
val = lst.extend(nums)时:extend()会直接把nums里的所有元素追加到lst尾部,执行完这行后lst本身已经变成[5,4,3,1,2]- 但该方法没有设计返回值,所以赋值给
val的内容就是Python无返回值方法默认的None,这就是打印val得到None的直接原因。
修正方案
不需要接收extend()的返回值,直接调用方法修改原列表后,打印列表本身即可:
nums=[1,2,3,4,5] k=3 lst = [] for i in range (1, k+1): lst.append(nums[-1]) nums.pop(-1) lst.extend(nums) # 原地修改lst,不做赋值 print("lst= ", lst)
运行后会输出正确结果:lst= [5, 4, 3, 1, 2]
补充说明:Python中所有列表原地操作方法都默认返回
None,常见的包括append()、sort()、reverse()、remove(),使用这类方法时不要尝试用变量接收返回值,直接操作原列表即可。
内容的提问来源于stack exchange,提问作者Few Frreahed
相关产品推荐
相关产品推荐

