追加和扩展列表方法之间有什么区别?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方法附加和扩展有什么区别?相关推荐

  1. 混淆概念详细解析:Python中类、对象、方法、函数和属性的区别和理解

    混淆概念详细解析:Python中类.对象.方法.函数和属性的区别和理解 前言 一.类.对象.方法.函数和属性的区别和理解 二.一个类的简单案例和对各种概念的理解 三.总结 欢迎学习交流! 邮箱: z- ...

  2. Python 的列表方法 append 和 extend 有什么区别?

    问: 这个问题的答案是社区的努力.编辑现有答案以改进这篇文章.它目前不接受新的答案或交互. 列表方法 append() 和 extend() 有什么区别? 答1: huntsbot.com提供全网独家 ...

  3. python 命令行参数-python获取命令行参数的方法(汇总)

    介绍python获取命令行参数的方法:getopt模和argparse模块. python版本:2.7 一.getopt模块 主要用到了模块中的函数: options, args = getopt.g ...

  4. python File 内置 open()方法(打开文件)

    文章目录 From builtins.py Dontla 20191030 Dontla 20200422 From builtins.py def open(file, mode='r', buff ...

  5. Python的list方法append和extend有什么区别?

    列表方法append()和之间有什么区别extend()? append:在末尾追加对象. x = [1, 2, 3] x.append([4, 5]) print (x) 给你: [1, 2, 3, ...

  6. 巧用Python:用Python批量复制文件,方法有9种,方便快捷

    当我们复制一个文件时用复制粘贴就可以了,如果是多个文件呢?就会很麻烦了,今天给大家介绍一下用Python批量复制文件,方法有九种!希望对你有帮助 1. Shutil Copyfile()方法 该方法只 ...

  7. 怎么用python找论文_如何利用Python绘制学术论文图表方法

    论文中图表形式多样,常用的处理工具有excel.MATLAB以及Python等,excel自处理的方法有两个缺陷: 1.当数据较多时,容易出现excel"翻白眼"的现象: 2.需要 ...

  8. python加载图片的方法_python从网络读取图片并直接进行处理的方法

    python从网络读取图片并直接进行处理的方法 更新时间:2015年05月22日 10:09:08 作者:pythoner 这篇文章主要介绍了python从网络读取图片并直接进行处理的方法,涉及cSt ...

  9. php判断网页编码,python判断网页编码的方法

    在web开发的时候我们经常会遇到网页抓取和分析,各种语言都可以完成这个功能.我喜欢用python实现,因为python提供了很多成熟的模块,可以很方便的实现网页抓取. 但是在抓取过程中会遇到编码的问题 ...

最新文章

  1. (0097)iOS开发之应用间的分享系列(2)
  2. Sql server中如何将表A和表B的数据合并(乘积方式)
  3. 什么是故事板?(故事图、Storyboard)(软件显示效果的视觉草图,用于视频创作和广告设计,表达作者的创意)
  4. WinAPI——Windows 消息
  5. python用语句输入一个3*3的二维矩阵_python中二维数组的建立,输入和输出
  6. 测试常用——linux 基础命令
  7. 一直对zookeeper的应用和原理比较迷糊,今天看一篇文章,讲得很通透,分享如下(转)...
  8. 广度优先搜索算法(Breath-first Search)是如何搜索一张图的?
  9. 《C++游戏开发》笔记十一 平滑动画:不再颤抖的小雪花
  10. java设置手指点击_java设置鼠标在jpanel时变为手指形状
  11. 未定义数组索引:_数据结构-数组
  12. Java面经总结(2020/10.20~11.20)
  13. mir2ei源码韩文乱码处理
  14. VOT2016目标跟踪使用教程
  15. C语言lowB排序和NB排序
  16. 日系插画学习笔记(三):光影与结构
  17. OPENSSL FIPS
  18. matplotlib画图修改刻度线的粗细、刻度字体的大小以及标题字体的大小
  19. Django建立博客搜索功能(haystack+whoosh+jieba)
  20. Brave Game ——巴什博奕

热门文章

  1. C#面试题(.net开发人员必备)
  2. List<T>和List<?>的区别
  3. 程序设计思路报告快递运输路线优化系统
  4. 基于JAVA+SpringMVC+Mybatis+MYSQL的汽车租赁系统
  5. 扩展类载入器的载入问题
  6. Swing写qq聊天软件(想要QQ表情@我呦)
  7. 在SQL Server查询分析器里查询Excel文件数据
  8. 【原】 图片预览 Image preview
  9. Python之数据分析(规范数据生成器Faker,学习、数据分析、开发测试专用)
  10. httpd mysql认证_Apache Httpd服务器之认证与授权