zoukankan      html  css  js  c++  java
  • python中append()与extend()方法的区别

    两个方法都是针对list的,不同的是输入对象不同,如下:

    my_list.append(object) # 输入的是object
    my_list.extend(iterable) # 输入的是可迭代对象
    

    一个典型的例子就是,对于append:

    >>> my_list
    ['foo', 'bar']
    >>> another_list = [1, 2, 3]
    >>> my_list.append(another_list)
    >>> my_list
    ['foo', 'bar', 'baz', [1, 2, 3]]
    

    而对于extend:

    >>> my_list
    ['foo', 'bar']
    >>> another_list = [1, 2, 3]
    >>> my_list.extend(another_list)
    >>> my_list
    ['foo', 'bar', 1, 2, 3] # 此处显然不同
    

    更多的用法如下:

    P = ['abc', 'jack']
    P.extend('666')               # 可迭代对象:字符串
    P.extend(['anna', 18])          # 可迭代对象:列表
    P.extend({'alice': 19, 'even': 22}) # 可迭代对象:字典(默认key)
    print("New list:", P)
    

    输出结果为:

    New list: ['abc', 'jack', '6', '6', '6', 'anna', 18, 'alice', 'even']
    

    append方法重写也可能达到跟extend一样的效果,

    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
    
  • 相关阅读:
    【笔记】二进制文件
    vs2015+64位win10系统ceres-solver编译
    python
    感受函数式编程-scala
    R语言diagram包画订单状态流图
    virtualbox下Centos6.5桥接模式上网配置方法
    配置对IIS上tabular的 HTTP 访问
    centos6.5下逻辑卷操作
    centos6.5下磁盘创建交换分区
    centos6.5下磁盘分区及挂载
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13281630.html
Copyright © 2011-2022 走看看