python list add_Python的List方法附加和扩展有什么区别?
追加和扩展列表方法之间有什么区别?append将其参数作为单个元素添加到列表的末尾。名单本身的长度将增加一倍。
extend迭代它的参数,将每个元素添加到列表中,扩展列表。不管迭代参数中有多少元素,列表的长度都会增加。
append
这个list.append方法将对象追加到列表的末尾。my_list.append(object)
不管对象是什么,无论是数字、字符串、另一个列表还是其他什么,它都会添加到my_list作为列表中的一个条目。>>> my_list['foo', 'bar']>>> my_list.append('baz')>>> my_list['foo', 'bar', 'baz']
所以请记住,列表是一个对象。如果将另一个列表追加到列表中,则第一个列表将是列表末尾的单个对象(这可能不是您想要的):>>> another_list = [1, 2, 3]>>> my_list.append(another_list)>>> my_list['foo', 'bar', 'baz', [1, 2, 3]]
#^^^^^^^^^--- single item at the end of the list.
extend
这个list.extend方法通过从可迭代的元素中追加元素来扩展列表:my_list.extend(iterable)
因此,使用EXTEND,迭代器的每个元素都会被追加到列表中。例如:>>> my_list['foo', 'bar']>>> another_list = [1, 2, 3]>>> my_list.extend(another_list)>>> my_list['foo', 'bar', 1, 2, 3]
请记住,字符串是可迭代的,因此,如果使用字符串扩展列表,则将在字符串上迭代时追加每个字符(这可能不是您想要的):>>> my_list.extend('baz')>>> my_list['foo', 'bar', 1, 2, 3, 'b', 'a', 'z']
操作员超载,__add__ (+)和__iadd__ (+=)
双管齐下+和+=运算符定义为list。它们在语义上类似于扩展。
my_list + another_list在内存中创建第三个列表,因此您可以返回它的结果,但它要求第二个可迭代的列表。
my_list += another_list修改现有的列表(它)是如我们所见,就地运算符和列表是可变的对象,因此它不会创建新的列表。它也像扩展一样工作,因为第二个可迭代性可以是任意类型的可迭代性。
别搞混了-my_list = my_list + another_list不等于+=-它给你一个全新的清单分配给我的清单。
时间复杂度
附加恒定时间复杂度,O(1).
扩展具有时间复杂度,O(K)。
迭代多次调用append增加了复杂性,使其等价于EXTEND,而且由于EXTEND的迭代是用C实现的,所以如果您打算将可迭代的连续项追加到列表中,则总是会更快。
性能
您可能会想知道什么是更好的性能,因为可以使用追加来实现与扩展相同的结果。以下功能也是如此:def append(alist, iterable):
for item in iterable:
alist.append(item)def extend(alist, iterable):
alist.extend(iterable)
所以让我们给他们计时:import timeit>>> min(timeit.repeat(lambda: append([], "abcdefghijklmnopqrstuvwxyz")))2.867846965789795>>> min(timeit.repeat(lambda: extend([], "abcdefghijklmnopqrstuvwxyz")))0.8060121536254883
对时间的评论
一位评论者说:完美的答案,我只是错过了比较只添加一个元素的时间
做语义上正确的事情。如果要在可迭代中追加所有元素,请使用extend。如果您只是添加一个元素,请使用append.
好的,让我们创建一个实验,看看它是如何及时完成的:def append_one(a_list, element):
a_list.append(element)def extend_one(a_list, element):
"""creating a new list is semantically the most direct
way to create an iterable to give to extend"""
a_list.extend([element])import timeit
我们看到,为了使用扩展来创建一个可迭代的方法是浪费时间的(小的):>>> min(timeit.repeat(lambda: append_one([], 0)))0.2082819009956438>>> min(timeit.repeat(lambda: extend_one([], 0)))0.2397019260097295
我们从中学到使用extend当我们只有一元素来追加。
而且,这些时间安排也没那么重要。我只是向他们表明,在Python中,做语义正确的事情就是做右(边),正确的Way™.
可以想象,您可能会在两个可比较的操作上测试时间,并得到一个模糊或相反的结果。专注于做语义上正确的事情。
结语
我们看到了extend在语义上更清晰,而且它的运行速度比append, 当您打算在可迭代的列表中追加每个元素时。
如果只有一个元素(不在可迭代元素中)才能添加到列表中,请使用append.
python list add_Python的List方法附加和扩展有什么区别?相关推荐
- 混淆概念详细解析:Python中类、对象、方法、函数和属性的区别和理解
混淆概念详细解析:Python中类.对象.方法.函数和属性的区别和理解 前言 一.类.对象.方法.函数和属性的区别和理解 二.一个类的简单案例和对各种概念的理解 三.总结 欢迎学习交流! 邮箱: z- ...
- Python 的列表方法 append 和 extend 有什么区别?
问: 这个问题的答案是社区的努力.编辑现有答案以改进这篇文章.它目前不接受新的答案或交互. 列表方法 append() 和 extend() 有什么区别? 答1: huntsbot.com提供全网独家 ...
- python 命令行参数-python获取命令行参数的方法(汇总)
介绍python获取命令行参数的方法:getopt模和argparse模块. python版本:2.7 一.getopt模块 主要用到了模块中的函数: options, args = getopt.g ...
- python File 内置 open()方法(打开文件)
文章目录 From builtins.py Dontla 20191030 Dontla 20200422 From builtins.py def open(file, mode='r', buff ...
- Python的list方法append和extend有什么区别?
列表方法append()和之间有什么区别extend()? append:在末尾追加对象. x = [1, 2, 3] x.append([4, 5]) print (x) 给你: [1, 2, 3, ...
- 巧用Python:用Python批量复制文件,方法有9种,方便快捷
当我们复制一个文件时用复制粘贴就可以了,如果是多个文件呢?就会很麻烦了,今天给大家介绍一下用Python批量复制文件,方法有九种!希望对你有帮助 1. Shutil Copyfile()方法 该方法只 ...
- 怎么用python找论文_如何利用Python绘制学术论文图表方法
论文中图表形式多样,常用的处理工具有excel.MATLAB以及Python等,excel自处理的方法有两个缺陷: 1.当数据较多时,容易出现excel"翻白眼"的现象: 2.需要 ...
- python加载图片的方法_python从网络读取图片并直接进行处理的方法
python从网络读取图片并直接进行处理的方法 更新时间:2015年05月22日 10:09:08 作者:pythoner 这篇文章主要介绍了python从网络读取图片并直接进行处理的方法,涉及cSt ...
- php判断网页编码,python判断网页编码的方法
在web开发的时候我们经常会遇到网页抓取和分析,各种语言都可以完成这个功能.我喜欢用python实现,因为python提供了很多成熟的模块,可以很方便的实现网页抓取. 但是在抓取过程中会遇到编码的问题 ...
最新文章
- (0097)iOS开发之应用间的分享系列(2)
- Sql server中如何将表A和表B的数据合并(乘积方式)
- 什么是故事板?(故事图、Storyboard)(软件显示效果的视觉草图,用于视频创作和广告设计,表达作者的创意)
- WinAPI——Windows 消息
- python用语句输入一个3*3的二维矩阵_python中二维数组的建立,输入和输出
- 测试常用——linux 基础命令
- 一直对zookeeper的应用和原理比较迷糊,今天看一篇文章,讲得很通透,分享如下(转)...
- 广度优先搜索算法(Breath-first Search)是如何搜索一张图的?
- 《C++游戏开发》笔记十一 平滑动画:不再颤抖的小雪花
- java设置手指点击_java设置鼠标在jpanel时变为手指形状
- 未定义数组索引:_数据结构-数组
- Java面经总结(2020/10.20~11.20)
- mir2ei源码韩文乱码处理
- VOT2016目标跟踪使用教程
- C语言lowB排序和NB排序
- 日系插画学习笔记(三):光影与结构
- OPENSSL FIPS
- matplotlib画图修改刻度线的粗细、刻度字体的大小以及标题字体的大小
- Django建立博客搜索功能(haystack+whoosh+jieba)
- Brave Game ——巴什博奕
热门文章
- C#面试题(.net开发人员必备)
- List<T>和List<?>的区别
- 程序设计思路报告快递运输路线优化系统
- 基于JAVA+SpringMVC+Mybatis+MYSQL的汽车租赁系统
- 扩展类载入器的载入问题
- Swing写qq聊天软件(想要QQ表情@我呦)
- 在SQL Server查询分析器里查询Excel文件数据
- 【原】 图片预览 Image preview
- Python之数据分析(规范数据生成器Faker,学习、数据分析、开发测试专用)
- httpd mysql认证_Apache Httpd服务器之认证与授权