鱼C论坛

 找回密码
 立即注册
查看: 3130|回复: 5

[已解决]使用insert()方法修改列表时,列表中多了None这个元素,这是为什么???

[复制链接]
发表于 2021-5-21 16:39:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
在零基础学习Python第11讲列表课后习题中,往列表中添加更多元素时,我遇到了以下问题,麻烦各位鱼油帮忙解答一下,嘻嘻~~

原题要求如下:
假设给定以下列表:
member = ['小甲鱼', '黑夜', '迷途', '怡静', '秋舞斜阳']
要求将列表修改为:
member = ['小甲鱼', 88, '黑夜', 90, '迷途', 85, '怡静', 90, '秋舞斜阳', 88]

我操作时使用了insert()和extend()这两个方法,但是列表的最后多了5个None,能解释一下为什么以及如何去除吗???谢谢~🙏🙏

>>> member = ['小甲鱼', '黑夜', '迷途', '怡静', '秋舞斜阳']
>>> member.extend([member.insert(1,88),member.insert(3,90),member.insert(5,85),member.insert(7,90),member.append(88)])
>>> member
['小甲鱼', 88, '黑夜', 90, '迷途', 85, '怡静', 90, '秋舞斜阳', 88, None, None, None, None, None]
最佳答案
2021-5-21 17:04:45
本帖最后由 Peteryo01223 于 2021-5-21 18:23 编辑

insert() 函数,是个“动作”,insert 也是英文中的一个动词,名词形式是 insertion。中文看不出词性,容易被忽略,就不好理解。insert 有名词意思,但小概率。英文中要说 I like inserting,I like to insert 或者 I like insertion,不能说 I like insert。Python 的设计者是个老美,潜意识里,受英文语法影响。

那么,当明确了 Insert 是一个 “动作”,之后,我们就理解了为何它没有返回值,或者说,返回值是 None。此动作,是要在列表指定位置插入对象。至于为何 Python 不报错,却默认一个返回值 None,或许就是 Fish C 说的 “Python中一切皆对象” 的一种体现吧。

结果,你原始的 code,把五次动作,都当作对象,给放进 list 中去了。返回值 None,也跟着 obj,作为对象的一部分进去了。同理,append 也是个纯粹的动词,英文中对应的名词是 appendix,它的返回值也是 None。

如果把你的 code 分解一下,单纯做五次动作,就不会有 None 乱入了。我没看原题,不知道小甲鱼出的题目是否允许,做五次动作。
>>> member = ['小甲鱼', '黑夜', '迷途', '怡静', '秋舞斜阳']
>>> member.insert(1,88)
>>> member.insert(3,90)
>>> member.insert(5,85)
>>> member.insert(7,90)
>>> member.append(88)
>>> member
['小甲鱼', 88, '黑夜', 90, '迷途', 85, '怡静', 90, '秋舞斜阳', 88]
>>> 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-5-21 16:47:17 From FishC Mobile | 显示全部楼层
老生常谈了,insert等都属于方法,没有返回值
它的功能是插入一个列表,而不是返回一个插入列表
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-21 16:49:10 | 显示全部楼层

Python 中,列表的绝大多数都没有返回值,例如这里的 insert、extend、append,但 pop 函数是具有返回值

这些方法是直接作用于原列表,大部分没有设置返回值的,而 Python 对于没有明确设置返回值的函数会默认返回 None

所以这里你在列表中直接使用列表方法,导致插入的列表方法默认的返回值 None


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-21 17:04:45 | 显示全部楼层    本楼为最佳答案   
本帖最后由 Peteryo01223 于 2021-5-21 18:23 编辑

insert() 函数,是个“动作”,insert 也是英文中的一个动词,名词形式是 insertion。中文看不出词性,容易被忽略,就不好理解。insert 有名词意思,但小概率。英文中要说 I like inserting,I like to insert 或者 I like insertion,不能说 I like insert。Python 的设计者是个老美,潜意识里,受英文语法影响。

那么,当明确了 Insert 是一个 “动作”,之后,我们就理解了为何它没有返回值,或者说,返回值是 None。此动作,是要在列表指定位置插入对象。至于为何 Python 不报错,却默认一个返回值 None,或许就是 Fish C 说的 “Python中一切皆对象” 的一种体现吧。

结果,你原始的 code,把五次动作,都当作对象,给放进 list 中去了。返回值 None,也跟着 obj,作为对象的一部分进去了。同理,append 也是个纯粹的动词,英文中对应的名词是 appendix,它的返回值也是 None。

如果把你的 code 分解一下,单纯做五次动作,就不会有 None 乱入了。我没看原题,不知道小甲鱼出的题目是否允许,做五次动作。
>>> member = ['小甲鱼', '黑夜', '迷途', '怡静', '秋舞斜阳']
>>> member.insert(1,88)
>>> member.insert(3,90)
>>> member.insert(5,85)
>>> member.insert(7,90)
>>> member.append(88)
>>> member
['小甲鱼', 88, '黑夜', 90, '迷途', 85, '怡静', 90, '秋舞斜阳', 88]
>>> 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-21 19:35:42 | 显示全部楼层
Peteryo01223 发表于 2021-5-21 17:04
insert() 函数,是个“动作”,insert 也是英文中的一个动词,名词形式是 insertion。中文看不出词性,容易 ...



Python 发明者是荷兰人哈

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
Peteryo01223 + 5 + 5 + 3 鱼C有你更精彩^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-21 19:53:16 From FishC Mobile | 显示全部楼层
Twilight6 发表于 2021-5-21 19:35
Python 发明者是荷兰人哈

我记错了,还真是个荷兰人。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-9 01:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表