向列表中添加元素有四种方法:append()、extend()、insert()、+=。
x = []
x.append([1, 2])
print(x) # [[1, 2]]
x.insert(1, [1, 2])
print(x) # [[1, 2], [1, 2]]
x.extend([1, 2])
print(x) # [[1, 2], 1, 2]
x += [1, 2]
print(x) # [[1, 2], [1, 2], 1, 2, 1, 2]
使用insert()方法向列表中指定的位置插入指定的元素,它有两个参数第一个参数代表要插入的位置,第二个参数代表要插入的元素。
x = []
x.insert(0, 1) # 整数
print(x) # [1]
x.insert(1, "星期五") # 字符串
print(x) # [1, '星期五']
x.insert(2, [2, 3]) # 列表
print(x) # [1, '星期五', [2, 3]]
x.insert(3, (4, 5)) # 元组
print(x) # [1, '星期五', [2, 3], (4, 5)]
x.insert(4, {1: "星期一", 2: "星期二"}) # 字典
print(x) # [1, '星期五', [2, 3], (4, 5), {1: '星期一', 2: '星期二'}]
x.insert(5, {10, 11}) # 集合
print(x) # [1, '星期五', [2, 3], (4, 5), {1: '星期一', 2: '星期二'}, {10, 11}]
x.insert(6, None) # None
print(x) # [1, '星期五', [2, 3], (4, 5), {1: '星期一', 2: '星期二'}, {10, 11}, None]
insert()方法不返回值,但更新列表。
x = []
y = x.insert(0, 1)
print(y) # None
print(x.insert(1, [2, 3])) # None
print(x) # [1, [2, 3]]
因为insert()方法没有产生值,所以不能将insert()方法赋给一个变量,不能直接使用print()函数将insert()方法输出。
x = []
y = x.insert(0, 1)
print(y) # None
print(x.insert(1, [2, 3])) # None
print(x) # [1, [2, 3]]
使用append()方法和insert()方法添加元素时,既可以添加单个元素,也可以添加序列,使用extend()方法添加元素时,只能添加序列,不能添加单个元素。
x = []
x.append([1, 2])
x.append(1)
print(x) # [[1, 2], 1]
x.insert(len(x), [1, 2])
x.insert(len(x), 1)
print(x) # [[1, 2], 1, [1, 2], 1]
x.extend([1, 2])
print(x) # [[1, 2], 1, [1, 2], 1, 1, 2]
append()方法和insert()方法是将整个序列添加进去,extend()方法是将序列拆分后一个元素一个元素的添加进去。
x = []
x.append([1, 2])
print(x) # [[1, 2]]
x.insert(1, [1, 2])
print(x) # [[1, 2], [1, 2]]
x.extend([1, 2])
print(x) # [[1, 2], 1, 2]
浅拷贝:拷贝这个对象的内存地址,原对象发生变化新对象也会跟着发生变化。
x = []
y = x
x.append("星期五")
print(y) # ['星期五']
深拷贝:拷贝这个对象的全部内容,原对象发生变化新对象不会跟着发生变化。
x = []
y = x.copy()
x.append("星期五")
print(x) # ['星期五']
print(y) # []
使用append()方法和insert()方法添加序列时,使用的是浅拷贝,使用extend()方法添加序列时,使用的是深拷贝。
x = []
y = [1, 2]
x.append(y)
print(x) # [[1, 2]]
y.append(3)
print(x) # [[1, 2, 3]]
x = []
y = [1, 2]
x.insert(1, y)
print(x) # [[1, 2]]
y.insert(2, 3)
print(x) # [[1, 2, 3]]
x = []
y = [1, 2]
x.extend([1, 2])
print(x) # [1, 2]
y.extend([3])
print(x) # [1, 2]
使用append()方法和insert()方法添加序列时,添加的是内存地址,而不是实际的值,如果原序列发生变化,添加进去的序列也会跟着发生变化,使用extend()方法添加序列时,添加的是全部内容,如果原序列发生变化添加进去的序列不会跟着发生变化(涉及到了浅拷贝和深拷贝)。
x = []
y = [1, 2]
x.append(y)
print(x) # [[1, 2]]
y.append(3)
print(x) # [[1, 2, 3]]
x = []
y = [1, 2]
x.insert(1, y)
print(x) # [[1, 2]]
y.insert(2, 3)
print(x) # [[1, 2, 3]]
x = []
y = [1, 2]
x.extend([1, 2])
print(x) # [1, 2]
y.extend([3])
print(x) # [1, 2]
insert()方法和len()函数可以搭配在一起。
# 方法1
x = [1, 1.1, "星期五", [1, 2], (1, 2)]
x.insert(len(x), "星期六")
print(x) # [1, 1.1, '星期五', [1, 2], (1, 2), '星期六']
# 方法2
x = [1, 1.1, "星期五", [1, 2], (1, 2)]
x.insert(99, "星期六")
print(x) # [1, 1.1, '星期五', [1, 2], (1, 2), '星期六']