M小姐 发表于 2021-5-21 16:39:32

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

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

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

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

>>> member = ['小甲鱼', '黑夜', '迷途', '怡静', '秋舞斜阳']
>>> member.extend()
>>> member
['小甲鱼', 88, '黑夜', 90, '迷途', 85, '怡静', 90, '秋舞斜阳', 88, None, None, None, None, None]

wp231957 发表于 2021-5-21 16:47:17

老生常谈了,insert等都属于方法,没有返回值
它的功能是插入一个列表,而不是返回一个插入列表

Twilight6 发表于 2021-5-21 16:49:10


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

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

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


Peteryo01223 发表于 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]
>>>

Twilight6 发表于 2021-5-21 19:35:42

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



Python 发明者是荷兰人哈

Peteryo01223 发表于 2021-5-21 19:53:16

Twilight6 发表于 2021-5-21 19:35
Python 发明者是荷兰人哈

我记错了,还真是个荷兰人。
页: [1]
查看完整版本: 使用insert()方法修改列表时,列表中多了None这个元素,这是为什么???