前言:由于写第(十)题的时候python版本代码涉及很多列表操作,当时发现很多自己忘得差不多了,所以趁热记录一下
码题集系列第十篇——列表实现数环碰撞
python列表
一、如何列表中间插入列表
- 方法一:extend
list1 = [1, 2, 3, 7, 8]
list2 = [4, 5, 6]
temp = list1[:3] # [1, 2, 3]
temp.extend(list2) # [1, 2, 3, 4, 5, 6]
temp.extend(list1[3:]) # [1, 2, 3, 4, 5, 6, 7, 8]
print(temp)
- 方法二:切片
list1 = [1, 2, 3, 7, 8]
list2 = [4, 5, 6]
list1[3:3] = list2
print(list1)
# [1, 2, 3, 4, 5, 6, 7, 8]
- 方法三:直接相加
list3 = list1 + list2
- 方法四:循环使用insert和append
二、删除操作
-
方法一:remove() 指定具体元素
-
方法二:pop() 默认尾部,可以指定索引
-
方法三:切片赋值为空列表[],原列表中指定一段被空替代相当于删除
-
方法四:clear 清空列表元素,list对象还在
-
方法五:del 直接删除列表对象
三、 列表相加
- 方法一:+ 新开一片内存,新创建一个列表
# id()函数返回对象在其生命周期内位于内存中的地址
b = [1, 2, 3]
print(id(b))
# 1457456566728
b = b + [7, 8, 9]
print(id(b))
# 1457457843016
- 方法二:+= 在原列表上追加
b = [1, 2, 3]
print(id(b))
# 1628740249224
b += [7, 8, 9]
print(id(b))
# 1628740249224
- 方法三:extend()
b = [1, 2, 3]
print(id(b)) #
# 2996932661704
b.extend([7, 8, 9])
print(id(b))
# 2996932661704
方法二、三等价,编程时应该尽量减少内存的拷贝,避免 list1 = list1 + list2这样的操作
( 拓展:初始化列表时避免使用类似 append 语法初始化列表, 优先使用列表表达式。因为因为一个 append 操作很可能是很多 append 操作的开始,通过额外分配内存来减少可能的内存分配和内存copy的次数。append操作会自动扩容)
四、列表赋值
- 方法一:list1 = list2
相当于起了一个别名,两个名字都指向同一片内存,所以修改其中一个另一个也会修改
- 方法二:list1 = list2[:]
相当于新拷贝了一个数组,指向不同的内存,互不相关,修改其中一个另一个不会改变