python中的列表操作

发布时间:2019-08-24 09:29:18编辑:auto阅读(1619)

    列表:(list)
    容器类型:某个对象包含对其它对象的引用,则将其称为容器。
    列表可以包含任何种类的对象(数字、字串、甚至嵌套其他列表,可以嵌套元组)
    内部包含:任意对象的有序集合,通过索引访问其中的元素,可变对象,支持异构(包含多种不同的元素),任意嵌套

     支持在原处修改:
            列表的可变表现为:其内部的每一个元素,存储在列表中不是对象本身,而是对象的引用,其修改其实是修改的引用,而不是真正的修改了内部的某个对象。
    
                    使用[]创建列表

    list1 = ["This","is","a","pig"]
    print list1[0]
    This
    print list1[0][0]
    T

    列表和元组并不真正存储数据而是存放的对象引用!

    解释:
    ["this","is","a","pig"]
    这里并不是存放了"this",而是在内存中找个了地方存放的"this",只是把"this"的存储的位置存放在这个列表当中。
    python中的列表操作

    ---列表的异构:

    In [2]: list = [1,'b']

    In [3]: print list
    [1, 'b']

    ---嵌套的列表:

    In [6]: list2 = [[1,2],['a','b']]

    In [7]: print list2
    [[1, 2], ['a', 'b']]

    ---列表的修改

    In [11]: list2 = [1,2,3,4,5]

    In [12]: print list2
    [1, 2, 3, 4, 5]

    In [13]: list2[1] = 888

    In [14]: print list2
    [1, 888, 3, 4, 5]

    ---删除指定的元素

    In [15]: list2
    Out[15]: [1, 888, 3, 4, 5]

    In [16]: del(list2[1:])

    In [17]: print list2
    [1]

    ---新增一个元素(append方法) 在最后指定附件元素
    In [19]: list2 = [1,2,3,4]

    In [20]: print list2
    [1, 2, 3, 4]

    In [21]: list2.append(5)

    In [22]: print list2
    [1, 2, 3, 4, 5]

    能不能附加多个元素?附加一个列表进来

    In [30]: print list2
    [1, 2, 3, 4, 5]

    In [31]: list3 = ['x','y','z']

    In [32]: list2.append(list3)

    In [33]: print list2
    [1, 2, 3, 4, 5, ['x', 'y', 'z']]

    注意:这里是把这个列表当作一个元素附加进来的。

    ---extend 方法
    extend list by appending elements from the iterable
    通过附加迭代元素来扩展列表

    In [37]: list1 = [1,2,3,4]

    In [38]: list2 = ['x','y','z']

    In [39]: list1.extend(list2)

    In [40]: print list1
    [1, 2, 3, 4, 'x', 'y', 'z']

    是把两个列表合并在一起了

    ---index方法(返回字符,第一次出现的索引编号)

    In [45]: list1 = [1,2,1,3,3,2]

    In [46]: list1.index(2)
    Out[46]: 1

    --- insert 方法(在指定的元素前面添加元素)

    In [49]: list = [1,2,3,4,5]

    In [50]: list.insert(2,'xyz')

    In [51]: print list
    [1, 2, 'xyz', 3, 4, 5]

    ---pop方法(弹出列表中的元素,默认是最后一个元素,按照索引删除,而remove是按照值删除的)
    In [57]: list
    Out[57]: [1, 2, 'xyz', 3, 4]

    In [58]: list.pop()
    Out[58]: 4

    In [59]: list.pop()
    Out[59]: 3

    In [60]: list
    Out[60]: [1, 2, 'xyz']

    ----remove 方法 (删除列表中指定的元素,安装值来删除)

    In [62]: list = [1,2,3,4,5]

    In [63]: list.remove(3)

    In [64]: print list
    [1, 2, 4, 5]

    * 列表相加会有什么效果呢? ***
    list1 + list2:合并两个列表,生产一个新列表,原列表不会改变
    list1 * N :重复list1 N次,生产新列表

    list1 = [1,2,3]
    list2 = ['x','y','z']
    list1 + list2
    [1, 2, 3, 'x', 'y', 'z'] ----> 返回了新的列表
    print list1
    [1, 2, 3]
    print list2
    ['x', 'y', 'z']

    list1
    [1, 2, 3]
    list1 * 3
    [1, 2, 3, 1, 2, 3, 1, 2, 3]

    in 操作符:成员关系判断符
    判断一个元素,是不是在一个列表当中,在返回true,否则返回false 用法:item in container

    not in 也类似

    list1
    [1, 2, 3]
    2 in list1
    True
    'x' in list1
    False

    在切片级别的修改替换的是元素

    list1
    [1, 2, 3]
    list1[1:]
    [2, 3]
    list1[1:] = ['x','y','z']
    list1
    [1, 'x', 'y', 'z']

    ***** 列表的复制 ****
    (1)轻度copy

    list1 = [1,2,3]
    list2 = list1
    list1.append(4)
    print list1
    [1, 2, 3, 4]
    print list2
    [1, 2, 3, 4]

    为什么会出现这种情况?
    因为它们指向了同一个内存对象,不是真正执行了复制

    id(list1)
    140325613007360
    id(list2)
    140325613007360

    (2) 使用list[:] 方式复制列表

    list1 = [1,2,3,4]
    list3 = list1[:]
    print list3
    [1, 2, 3, 4]
    list1.append(5)
    print list1
    [1, 2, 3, 4, 5]
    print list3
    [1, 2, 3, 4]
    id(list1)
    140325612904744
    id(list3)
    140325613007648

    (3)通过内置库copy复制列表
    import copy
    copy.deepcopy
    Deep copy operation on arbitrary Python objects.
    对任意Python对象进行深度复制操作。

    list1
    [1, 2, 3, 4, 5]
    import copy
    list1
    [1, 2, 3, 4, 5]
    id(list1)
    140325612904744
    list2 = copy.deepcopy(list1)
    print list2
    [1, 2, 3, 4, 5]
    id(list2)
    140325613030936

关键字