Python 列表 append()函数使用详解

Python 列表 append()函数使用详解

「作者主页」:士别三日wyx

append函数详解

1. 基本使用2. 任意类型元素3. 列表同步3.1 原理剖析3.2 解决方案

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

1. 基本使用

append() 函数可以向列表末尾添加元素

语法

list.append( element )

参数

element:任何类型的元素

实例:向列表末尾添加一个元素

name_list = ['zhangsan', 'lisi', 'wangwu']

name_list.append('zhaoliu')

print(name_list)

输出:

['zhangsan', 'lisi', 'wangwu', 'zhaoliu']

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

2. 任意类型元素

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

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

list1 = ['zhangsan', 'lisi', 'wangwu']

list1.append(1) # 添加整形

print(list1)

list1.append('str') # 添加字符型

print(list1)

输出:

['zhangsan', 'lisi', 'wangwu', 1]

['zhangsan', 'lisi', 'wangwu', 1, 'str']

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

list1 = ['zhangsan']

list1.append([1,2,3]) # 添加列表

print(list1)

list1.append((4,5,6)) # 添加元祖

print(list1)

输出:

['zhangsan', [1, 2, 3]]

['zhangsan', [1, 2, 3], (4, 5, 6)]

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也会同步变化

输出:

['zhangsan', [1, 2, 3]]

['zhangsan', [1, 2, 3, 4], [1, 2, 3, 4]]

3.1 原理剖析

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

list1 = ['zhangsan']

a = [1,2,3]

list1.append(a)

print(a, id(a)) # 列表a的引用地址

print(list1[1], id(list1[1])) # 添加到列表后的引用地址

输出:

[1, 2, 3] 2992145244608

[1, 2, 3] 2992145244608

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])) # 添加到列表后的引用地址

输出:

[1, 2, 3] 1963457096704

[1, 2, 3] 1963458936640

由输出结果可以确定,添加后的列表不再引用源列表的地址 使用「深拷贝」添加列表的内容而不是引用地址,从而解决列表同步的问题

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不再同步变化

输出:

['zhangsan', [1, 2, 3]]

['zhangsan', [1, 2, 3], [1, 2, 3, 4]]

列表同步问题解决了

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

append添加的是元素本身,而extend添加的是元素的值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)

输出:

append添加整个列表: ['zhangsan', 'lisi', 'wangwu', [1, 2, 3]]

extend添加列表的值: ['zhangsan', 'lisi', 'wangwu', 1, 2, 3]

相关推荐

全职老爹
365平台客服电话

全职老爹

📅 08-28 👍 721
源码资本投资机构信息
365bet返水多少

源码资本投资机构信息

📅 08-20 👍 523
谈谈“箭羽”
365平台客服电话

谈谈“箭羽”

📅 09-12 👍 874
DNF FPS提升技巧
365平台客服电话

DNF FPS提升技巧

📅 07-07 👍 484
畑怎么读音
在哪个应用商店能下载365

畑怎么读音

📅 07-22 👍 328
鸡头又名芡子
365bet返水多少

鸡头又名芡子

📅 07-07 👍 423