1 Fork me on GitHub

Python常用数据结构-列表 ——2.1 列表的方法 append()

2.1 列表的方法 append()

append(item):将一个对象item添加到列表末尾。(向列表末尾添加元素)
入参:对象item                                                                (phthon中一切都是对象,比如字符串,整数,浮点数,列表,元祖,集合,字典,列表等等等)
返回:None                                                                        (即没有返回值)

# 添加元素
li = []
li.append(1)
li.append(3.14)
li.append("hogwarts")
li.append([6,6,6,])
li.append((1.2,1.5))
li.append({"msg":"hello"})

print(li)                   # 打印列表
print(len(li))            # 获取列表元素个数

打印结果:

需要注意的是, append() 函数添加的元素在列表的「末尾」而不是任意位置

示例1:

name_list = ['zhangsan', 'lisi', 'wangwu']
name_list.append('zhaoliu')
print(name_list)

打印:

注意:

这里如果添加2个元素:

name_list = ['zhangsan', 'lisi', 'wangwu']
name_list.append('zhaoliu',"lingqi")
print(name_list)

返回会报错:

2. 任意类型元素

append() 函数可以向列表末尾添加「任意类型」的元素。

实例1:添加普通类型(数值、字符串)元素

list1 = ['zhangsan', 'lisi', 'wangwu']
list1.append(1)  # 添加整形
print(list1)
list1.append('str')  # 添加字符型
print(list1)

打印返回:

实例2:添加集合类型(列表,元祖)元素

list1 = ['zhangsan']
list1.append([1,2,3])  # 添加列表
print(list1)
list1.append((4,5,6))  # 添加元祖
print(list1)

打印返回:

3. 列表同步

使用 append() 函数添加列表时,是添加列表的「引用地址」而不是添加列表内容,当被添加的列表发生变化时,添加后的列表也会同步发生变化。

list1 = ['zhangsan']
a = [1,2,3]
list1.append(a)  # 列表list1添加列表a
print(list1)
a.append(4)  # 列表a发生变化
list1.append(a)
print(list1)  # 列表list1也会同步变化

打印返回:

3.1 原理剖析

从输出结果可以发现,当添加的列表发生变化时,先前添加的内容也发生了改变,这会使程序出现意料之外的问题,我们使用 id() 函数验证一下

list1 = ['zhangsan']
a = [1,2,3]
list1.append(a)
print(a, id(a))  # 列表a的引用地址
print(list1[1], id(list1[1]))  # 添加到列表后的引用地址

打印返回:

3.2 解决方案

从输出结果可以看出,问题的原因就在引用地址上面。这里补充两个概念

  • 浅拷贝:拷贝这个对象的引用地址
  • 深拷贝:拷贝对象的内容

使用 copy.deepcopy() 函数深拷贝列表的内容而不是列表的引用地址

list1 = ['zhangsan']
a = [1,2,3]
list1.append(copy.deepcopy(a))
print(a, id(a))                # 列表a的引用地址
print(list1[1], id(list1[1]))  # 添加到列表后的引用地址

打印返回:

由输出结果可以确定,添加后的列表不再引用源列表的地址

使用「深拷贝」添加列表的内容而不是引用地址,从而解决列表同步的问题

list1 = ['zhangsan']
a = [1,2,3]
list1.append(copy.deepcopy(a))  # 深拷贝列表a
print(list1)
a.append(4)  # 列表a发生变化
list1.append(copy.deepcopy(a))  # 深拷贝列表a
print(list1)  # 列表list1不再同步变化

打印返回:

列表同步问题解决了!!!

4. append()与extend()的区别

  1. append添加的是元素本身,而extend添加的是元素的值
  2. append可以添加所有类型元素,而extend只能添加序列

比如,添加列表时,append会添加整个列表,而extend只会添加列表中的值

list1 = ['zhangsan', 'lisi', 'wangwu']
list2 = ['zhangsan', 'lisi', 'wangwu']
list1.append([1,2,3])
print('append添加整个列表:', list1)
list2.extend([1,2,3])
print('extend添加列表的值:', list2)

打印返回:

总结

到此这篇关于Python列表append()函数使用方法的文章就介绍到这了,

posted @ 2022-04-24 17:29  v_jjling  阅读(726)  评论(0编辑  收藏  举报
AmazingCounters.com