文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-09-08 10:28

关注

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

append函数详解

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

语法

list.append( element )

参数

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

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

输出:

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

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

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)]

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

list1 = ['zhangsan']a = [1,2,3]list1.append(a)  # 列表list1添加列表aprint(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 解决方案

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

  1. 浅拷贝:拷贝这个对象的引用地址
  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))  # 深拷贝列表aprint(list1)a.append(4)  # 列表a发生变化list1.append(copy.deepcopy(a))  # 深拷贝列表aprint(list1)  # 列表list1不再同步变化

输出:

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

列表同步问题解决了

  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)

输出:

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

来源地址:https://blog.csdn.net/wangyuxiang946/article/details/122142534

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯