美文网首页程序员
关于Python列表你可能会忽略的8个知识点

关于Python列表你可能会忽略的8个知识点

作者: Batkid | 来源:发表于2018-09-27 09:50 被阅读0次

    1. 用切片来实现拷贝

    切片是python中列表非常常见的操作,不仅仅可以用来“切割”列表,还可以优雅的对一个列表进行拷贝。

    >>> a = ['foo', 'bar', 'baz', 'qux', 'quux', 'corge']
    >>> a[:]
    ['foo', 'bar', 'baz', 'qux', 'quux', 'corge']
    >>> a[:] is a
    False
    

    需要注意的是,这种拷贝只是浅拷贝。

    >>> a = ['foo', 'bar', 'baz',[1,3,5]]
    >>> a[:]
    ['foo', 'bar', 'baz', [1, 3, 5]]
    >>> b = a[:]
    >>> b.append('c')
    >>> b
    ['foo', 'bar', 'baz', [1, 3, 5], 'c']
    >>> b[3].append('d')
    >>> b
    ['foo', 'bar', 'baz', [1, 3, 5, 'd'], 'c']
    >>> a
    ['foo', 'bar', 'baz', [1, 3, 5, 'd']]
    

    2. 用列表代替列表中的部分元素

    >>> a = ['foo', 'bar', 'baz', 'chic', 'fox', 'cock']
    
    >>> a[1:4]
    ['bar', 'baz', 'chic']
    >>> a[1:4] = [1.1, 2.2, 3.3, 4.4, 5.5]
    >>> a
    ['foo', 1.1, 2.2, 3.3, 4.4, 5.5, 'fox', 'cock']
    

    3. 把一个列表插入到另一个列表,并替换掉插入位置的元素

    >>> a = [1, 2, 3]
    >>> a[1:2] = [0.1, 0.2, 0.3]
    >>> a
    [1, 0.1, 0.2, 0.3, 3]
    

    注意被替换元素的序号与切片范围的关系

    4. 从某个位置把一个列表插入到另一个列表,不替换任何元素

    >>> a = [1, 2, 7, 8]
    >>> a[2:2] = [3, 4, 5, 6]
    >>> a
    [1, 2, 3, 4, 5, 6, 7, 8]
    

    5. 批量删除列表中的元素

    还是利用切片来实现

    >>> a = ['foo', 'bar', 'baz', 'qux', 'quux', 'corge']
    >>> a[1:5] = []
    >>> a
    ['foo', 'corge']
    
    >>> a = ['foo', 'bar', 'baz', 'qux', 'quux', 'corge']
    >>> del a[1:5]
    >>> a
    

    6. extendappend的区别

    append(object) 是把参数object当作一个整体的对象加入到list的尾端

    >>> a = ['a', 'b']
    >>> x = a.append(123)
    >>> print(x)
    None
    >>> a
    ['a', 'b', 123]
    

    即使这个object是一个可迭代对象

    >>> a = ['a', 'b']
    >>> a.append([1, 2, 3])
    >>> a
    ['a', 'b', [1, 2, 3]]
    

    extend接受的参数是一个iterable对象,然后把这个iterable对象中的各个元素从尾端加入到列表中。

    >>> a = ['a', 'b']
    >>> a.extend([1, 2, 3])
    >>> a
    ['a', 'b', 1, 2, 3]
    

    7. List的多数方法返回值都是None

    例如
    a.append(<obj>)
    a.extend(<iterable>)
    a.insert(<index>, <obj>)
    a.remove(<obj>)
    除了pop会返回弹出的那个值之前,上面的方法都是返回的None.

    8. 使用列表做方法的默认参数

    列表属于mutable 的对象,用列表做方法的默认参数会出现与期望不符的结果

    def add_end(L=[]):
       L.append('END')
    return L
    
    #正常调用时:
    >>> add_end([1, 2, 3])
    [1, 2, 3, 'END']
    >>> add_end(['x', 'y', 'z'])
    ['x', 'y', 'z', 'END']
    
    #第一次通过默认参数调用时,也是正常的
    >>> add_end()
    ['END']
    
    #再次调用add_end()时,结果就不对了
    >>> add_end()
    ['END', 'END']
    >>> add_end()
    ['END', 'END', 'END']
    

    这是因为默认参数L始终指向的同一个对象,而python的参数传递对于可变对象实际上是引用传递。

    相关文章

      网友评论

        本文标题:关于Python列表你可能会忽略的8个知识点

        本文链接:https://www.haomeiwen.com/subject/cokroftx.html