今天刷leetcode的时候,看官方题解,发现一种python的列表插入方法。

即使用切片来实现插入。

现在来比较一下insert()方法和切片实现插入的区别。

insert()

描述
insert() 函数用于将指定对象插入列表的指定位置。

语法
insert()方法语法:

list.insert(index, obj)
参数
index — 对象 obj 需要插入的索引位置。
obj — 要插入列表中的对象。
返回值
该方法没有返回值,但会在列表指定位置插入对象。

1
2
3
4
5
6
7
8
9
>>> list = [0,1,2,3,4,5]
>>> list.insert(3,'s')
>>> list
[0, 1, 2, 's', 3, 4, 5]

>>> list = [0,1,2,3,4,5]
>>> list.insert(-2,'s')
>>> list
[0, 1, 2, 3, 's', 4, 5]

默认行为是将项目插入给定索引;
索引较高的每个值都移到最后一个位置。

1
2
3
4
5
6
7
8
9
>>> list = []
>>> list.insert(3,'s')
>>> list
['s']

>>> list = []
>>> list.insert(-2,'s')
>>> list
['s']

如果列表为空,则该项目将正常添加。

如果索引超出范围,则如果索引为正,则该项目将追加到末尾;如果索引为负,则将其追加到开头。

1
2
3
4
5
6
7
8
9
>>> list = [0,1]
>>> list.insert(5,'s')
>>> list
[0, 1, 's']

>>> list = [0,1]
>>> list.insert(-4,'s')
>>> list
['s', 0, 1]

切片

切片符号的行为完全相同,
在相同索引范围内:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
>>> list=[0,1,2,3,4,5]
>>> list[3:3] = 's'
>>> list
[0, 1, 2, 's', 3, 4, 5]

>>> list=[0,1,2,3,4,5]
>>> list[-2:-2] = 's'
>>> list
[0, 1, 2, 3, 's', 4, 5]

>>> list = []
>>> list[3:3] = 's'
>>> list
['s']

>>> list = []
>>> list[-2:-2] = 's'
>>> list
['s']

>>> list = [0,1]
>>> list[5:5] = 's'
>>> list
[0, 1, 's']

>>> list = [0,1]
>>> list[-4:-4] = 's'
>>> list
['s', 0, 1]

# 切片符号与使用切片对象调用__setitem __()方法相同:
>>> list = [0,1,2,3,4,5]
>>> list.__setitem__(slice(3,3),['s'])
>>> list
[0, 1, 2, 's', 3, 4, 5]

python有各种神奇的操作,需要多学学其他大佬们写python的方式,不能闭门造车。

在写代码的时候,我发现了insert()和使用切片进行插入的区别了。

1
2
3
4
5
6
7
8
9
10
11
使用insert()
>>> res = []
>>> res.insert(0,[1,2])
>>> res
[[1, 2]]

使用切片进行插入
>>> res = []
>>> res[0:0] = [1,2]
>>> res
[1, 2]

插入一个列表的时候,使用切片,会将列表拆开,而使用insert()插入的是列表。