• Python3中的列表用法,看这一篇就够了


    类似C语言中的列表用法

    --------------------------------------------------------------------------------------------------------------

    创建:列表使用中括号表示,内部元素使用逗号隔开,元素的数据类型允许不一致,允许多层嵌套

    names = ['Tom',"Lily",'Eric']

    infos = ['Hello',5,[5.6,'BYE']]

    访问:利用列表的[下标 ]访问单个元素,第一个元素的下标是0,依次加1;也可从最后一个元素访问,下标是-1,依次减1

    若下标出界,则报错IndexError: list index out of range

    >>> names[0]

    'Tom'
     
    >>> names[2]
    'Eric'
     
    >>> names[-1] #访问最后一个元素(倒数第一个元素)
    'Eric'
     
    >>> names[-2#访问倒数第二个元素
    'Lily'
     
    >>> infos[2][1] #访问多层列表
    'BYE'
     

     追加:在原有的列表末尾追加一个或者多个

     >>> names

    ['Tom', 'Lily', 'Eric']
    >>> names.append("Rain") #在末尾添加一个元素使用append()
    >>> names ['Tom', 'Lily', 'Eric', 'Rain']

    >>> names.expend(['Peter', 'Amy']) #在末尾添加多个元素使用expend()
    >>> names
    ['Tom', 'Lily', 'Eric', 'Rain','Peter', 'Amy']
     
    切片:与访问单个元素不同的是,切片可一下子访问多个元素
    >>> names = ["Alex","Tenglan","Eric","Rain","Tom","Amy"]
    >>> names[1:4]  #取下标1至下标4之间的值,包括1,不包括4
    ['Lily', 'Eric', 'Rain']
    >>> names[1:-1] #取下标1至-1的值,不包括-1 ['Lily', 'Eric', 'Rain', 'Peter']
    >>> names[0:3] #取开头到下标3之间的值,不包括3
    ['Tom', 'Lily', 'Eric']
    >>> names[:3] #如果是从头开始取,0可以忽略,跟上句效果一样
    ['Tom', 'Lily', 'Eric']
    >>> names[3:] #如果想取最后一个,不能写-1,只能这么写 ['Rain', 'Peter', 'Amy']

    切片默认的步长为1,意思是下标值递增1取值;也可自行设置步长[start:end:步长]
    >>> names[1:5:2] #取下标值为1,3 的值 ['Lily', 'Rain']
    >>> names[::2] #表示从开头的下标值开始加2取
    ['Tom', 'Eric', 'Peter']

     插入,使用list.insert(位置,元素)将需要添加的元素插入到目标列表的下标位置处

    >>> names
    ['Tom', 'Lily', 'Eric', 'Rain', 'Peter', 'Amy']
    >>> names.insert(2,'p2')
    ['Tom', 'Lily', 'p2', 'Eric', 'Rain', 'Peter', 'Amy']

    >>> names.insert(0,'start')
    ['start', 'Tom', 'Lily', 'p2', 'Eric', 'Rain', 'Peter', 'Amy']

    >>> names.insert(-1,'end')#本意是插入到最后一个,但是结果不对
    ['start', 'Tom', 'Lily', 'p2', 'Eric', 'Rain', 'Peter', 'end', 'Amy']

    修改:直接将元素重新赋值即可

    >>> names
     ['start', 'Tom', 'Lily', 'p2', 'Eric', 'Rain', 'Peter', 'end', 'Amy']

    >>>names[-2] = '该换人了'
    ['start', 'Tom', 'Lily', 'p2', 'Eric', 'Rain', 'Peter', '该换人了', 'Amy']

    删除:有三种删除方法,del、remov()和pop(),示例如下

     

    >>>names
    ['start', 'Tom', 'Lily', 'p2', 'Eric', 'Rain', 'Peter', '该换人了', 'Amy']

    1. del list[index] 用下标值index删除
    >>> del names[0]
    ['Tom', 'Lily', 'p2', 'Eric', 'Rain', 'Peter', '该换人了', 'Amy']

    >>> del names[6]
    ['Tom', 'Lily', 'p2', 'Eric', 'Rain', 'Peter', 'Amy']

    del names[]表示删除names列表

    2.list.remove(value)用元素值删除

    >>> names.remove('p2')
    ['Tom', 'Lily', 'Eric', 'Rain', 'Peter', 'Amy']

    3.list.pop(index) 用下标值index删除,若省略则删除最后一个元素
    >>> names.pop()#不写下标值删除最后一个
    ['Tom', 'Lily', 'Eric', 'Rain', 'Peter']

    >>>names.pop(1)
    ['Tom', 'Eric', 'Rain', 'Peter']

     统计:使用list.count(value)统计列表中元素值value出现的次数

    >>> names2 = ['Tom', 'Eric', '3Rain', '_Peter','Tom2','Tom',1,2,3]
    >>> names2.count('Tom')
    2

    翻转:list.reverse()基于当前列表将元素排列顺序翻转(不生成新列表)

    >>> names2 = ['Tom', 'Eric', '3Rain', '_Peter','Tom2','Tom',1,2,3]
    >>> names2.reverse()
    [3, 2, 1, 'Tom', 'Tom2', '_Peter', '3Rain', 'Eric', 'Tom']

    排序:list.sort()将列表元素值首字母的ASCII码或者数值升序(默认)或者降序排列

    若有元素数据类型不一致会出现报错例如:TypeError: '<' not supported between instances of 'str' and 'int'

    >>> names3 = ['Tom', 'Eric', '3Rain', '_Peter','Tom2','Tom','1','2','3']
    >>> names3.sort()
    >>> names3
    ['1', '2', '3', '3Rain', 'Eric', 'Tom', 'Tom', 'Tom2', '_Peter']

    >>> nums = [1,2.6,3,56,89,-1]
    >>> nums.sort()
    >>> nums
    [-1, 1, 2.6, 3, 56, 89]

    也可使用list.sort(reverse = True)进行降序排列

    获取下标:list.index[value]返回列表中第一个元素值为value的下标
    >>> names2
    [3, 2, 1, 'Tom', 'Tom2', '_Peter', '3Rain', 'Eric', 'Tom']
    >>> names2.index('Tom')
    3

    复制列表

     1. 使用“=”直接复制出另一个列表,不过这两个列表指向同一个对象,改变任何一个列表的元素值均会影响另一个,包括一维、多维里的元素

    >>>infos1 = infos
    >>>print(infos,infos1)
    ['Hello', 5, [5.6, 'BYE']] ['Hello', 5, [5.6, 'BYE']]
    >>>infos[1] = 'world'
    >>>infos[2][1] = 'BUPT'
    >>>print(infos,infos1)
    ['Hello', 'world', [5.6, 'BUPT']] ['Hello', 'world', [5.6, 'BUPT']]

     此方法并不是严格意义上的复制,只是新建了一个对象指向了原来的空间

    2. 工厂函数,会改变多维元素,一维元素不改变

    >>>infos2 = infos
    >>>print(infos,infos2)
    ['Hello', 5, [5.6, 'BYE']] ['Hello', 5, [5.6, 'BYE']]
    >>>infos[1] = 'world'
    >>>infos[2][1] = 'BUPT'
    >>>print(infos,infos2)
    ['Hello', 'world', [5.6, 'BUPT']] ['Hello', 5, [5.6, 'BUPT']]

    中间的列表是单独分配了一块空间,然后从第一层列表中去引用地址,复制的info2也是引用的地址,所以真实的值一变,两个列表的内部列表的值也就变了

    3. 使用list.copy()进行浅复制

    >>>infos3 = infos.copy()
    >>>print(infos,infos3)
    ['Hello', 5, [5.6, 'BYE']] ['Hello', 5, [5.6, 'BYE']]
    >>>infos[1] = 'world'
    >>>infos[2][1] = 'BUPT'
    >>>print(infos,infos3)
    ['Hello', 'world', [5.6, 'BUPT']] ['Hello', 5, [5.6, 'BUPT']]

    可见,此方法与方法2工厂函数复制的结果一样


    4.调用copy模块进行浅复制
    >>>infos4 = copy.copy(infos)
    >>>print(infos,infos3)
    ['Hello', 5, [5.6, 'BYE']] ['Hello', 5, [5.6, 'BYE']]
    >>>infos[1] = 'world'
    >>>infos[2][1] = 'BUPT'
    >>>print(infos,infos4)
    ['Hello', 'world', [5.6, 'BUPT']] ['Hello', 5, [5.6, 'BUPT']]

    可见,此方法与方法2工厂函数复制的结果一样

    5.调用copy模块进行深复制
    >>>infos5 = copy.deepcopy(infos)
    >>>print(infos,infos5)
    ['Hello', 5, [5.6, 'BYE']] ['Hello', 5, [5.6, 'BYE']]
    >>>infos[1] = 'world'
    >>>infos[2][1] = 'BUPT'
    >>>print(infos,infos5)
    ['Hello', 'world', [5.6, 'BUPT']] ['Hello', 5, [5.6, 'BYE']]

    由此可见,只有这种方法做到了完全复制出了另一个独立的列表

    小结:
    用=生成的列表只是指向了同一个空间,相当于同一个空间有两个列表名字而已
    浅复制实现有三种:工厂函数[:]、copy方法和调用copy模块浅复制,运行结果是第一维元素复制出来是独立的,第二维等多维元素列表公用了同一个空间
    完全独立复制就只能使用copy模块里的深复制了

    列表拼接
    与字符串类似,可以使用加号+进行拼接(注意不是元素值相加),使用乘号*复制自身若干次
    >>>list1 = [1,2,3]
    >>>list2 = [1,3,5]
    >>>list3 = list1 + list2
    [1, 2, 3, 1, 3, 5]
    >>>list4 = list1*3
    [1, 2, 3, 1, 2, 3, 1, 2, 3]
    当然,expan()方法也能实现,并且显得更为专业

    列表比大小
    默认从第一个元素开始比较其对应的ASCII码的大小,只要有一个pk赢了就代表整个列表赢了
    >>>list1 < list2
    False

    判断元素是否存在
    in 和 not in,注意只能在当前维度进行判断
    >>>infos
    ['Hello', 'world', [5.6, 'BUPT']]
    >>>'Hello' in infos
    True
    >>>5.6 in infos
    False
    >>>5.6 in infos[2]
    True
     
  • 相关阅读:
    POJ 1017
    poj 2709
    poj 1328
    POJ 2386
    POJ 1065
    POJ 3728
    hdu--1004--Let the Balloon Rise
    hdu--2570--迷瘴(贪心)
    hdu--1257--最少拦截系统(贪心)
    hdu--1230--火星A+B
  • 原文地址:https://www.cnblogs.com/aby321/p/10916929.html
Copyright © 2020-2023  润新知