zoukankan      html  css  js  c++  java
  • day09-列表

    1、列表的格式
    list与其他语言的数组相似,基础数据类型,可以存储各种数据类型,可以存储大量的数据,
    32位python可以存储2的29次方个元素,即536870912个元素,64位python的限制是2的60次方-1即1152921504606846975个元素。而且列表是有序的,有索引值,可切片,方便取值。
    Python的列表中可以存储不同类型的元素。
    # L1 = ['a', 123, True, (1, 2, 3, 'aaa'), [1, 2, 3, '小明', ], {'name': 'Tom'}]

    例如:列出所有文件的后缀名
    用for和while两种方法实现
    file_list = ['01.txt', '02.doc', '03.py']
    for temp in file_list:
    index = temp.rfind('.')
    print(temp[index:])

    列表元素的增删改查
    2、增加有三种方式:append、insert 、extend
    L1 = ['Tom', 'Jack', 'Mike', 'LiLei']

    2.1 append列表最后面追加
    L1.append('HanMeimei')
    print(L1.append('HanMeimei'))
    print(L1)
    结果:['Tom', 'Jack', 'Mike', 'LiLei','HanMeimei']

    2.2 insert 在指定下标的位置上插入
    L1.insert(1,'Rose')
    print(L1)
    结果:['Tom', 'Rose', 'Jack', 'Mike', 'LiLei']

    2.3 extend() 两个列表迭代的追加,将另一个列表中的元素逐一添加到列表中,与append不同,append是把列表b整体追加到列表a后面,而extend是把列表b中的元素逐个追加到列表a后面。
    L1.extend('abc')
    print(L1)
    结果:['Tom', 'Jack', 'Mike', 'LiLei', 'a', 'b', 'c']

    L1.extend(['abc', 'erf'])
    print(L1)
    结果:['Tom', 'Jack', 'Mike', 'LiLei', 'abc', 'erf']

    3、删除有三种方法:del、pop、remove

    3.1 del:根据下标进行删除
    L1 = ['Tom', 'Jack', 'Mike', 'Rose', 'LiLei','HanMeimei']
    del L1[1]
    print(L1)
    ['Tom', 'Mike', 'Rose', 'LiLei', 'HanMeimei']

    按照切片(步长)
    del L1[:2]
    print(L1)
    ['Mike', 'Rose', 'LiLei', 'HanMeimei']

    del L1[::2]
    print(L1)
    ['Jack', 'Rose', 'HanMeimei']

    3.2 pop:当pop()内指定下标时,可以删除指定元素,如果不指定下标默认删除最后一个元素
    L1 = ['Tom', 'Jack', 'Mike', 'Rose', 'LiLei','HanMeimei']
    L1.pop(1)
    print(L1)
    ['Tom', 'Mike', 'Rose', 'LiLei', 'HanMeimei']

    3.3 remove:根据元素的值进行删除
    ['Tom', 'Mike', 'Rose', 'LiLei', 'HanMeimei']
    L1.remove('Jack')
    print(L1)
    ['Tom', 'Mike', 'Rose', 'LiLei', 'HanMeimei']

    4、修改元素
    ['Tom', 'Mike', 'Rose', 'LiLei', 'HanMeimei']
    4.1 按照索引修改
    L1[1] = 'XiaoMing'
    print(L1)
    ['Tom', 'XiaoMing', 'Rose', 'LiLei', 'HanMeimei']

    4.2 按照切片修改,如果不加步长,则字符串个数可以不限制,比如修改前2个字符,后面赋值可以是多个字符
    L1[:2] = ['a','b','c','d']
    print(L1)
    ['a', 'b', 'c', 'd', 'Rose', 'LiLei', 'HanMeimei']

    4.3 加上步长就一定要一一对应,也就是说按照每隔2个字符取值最终能取到3个字符,那么赋值的时候也必须要赋3个值,否则会报错
    L1[::2] = 'abc'
    print(L1)
    ['a', 'Mike', 'b', 'LiLei', 'c']

    5、查找元素
    5.1、通过索引,切片,切片(步长)进行列表查询。(与字符串一样)
    切片的语法:【起始:结束:步长】

    注意:选取的区间属于左闭右开型,即从“起始”位开始,到“结束”位的前一位结束(不包含结束位本身)。

    取一个list或tuple的部分元素:
    L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']
    L[0:3]
    ['Michael', 'Sarah', 'Tracy']
    #L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3。即索引0,1,2,正好是3个元素。

    如果第一个索引是0,还可以省略:
    L[:3]
    ['Michael', 'Sarah', 'Tracy']

    也可以从索引1开始,取出2个元素出来:
    L[1:3]
    ['Sarah', 'Tracy']

    L[-1]取倒数第一个元素,那么它同样支持倒数切片,记住倒数第一个元素的索引是-1。
    L[-2:]
    ['Bob', 'Jack']
    L[-2:-1]
    ['Bob']


    切片操作十分有用。我们先创建一个0-9的数列:
    L = list(range(10))
    L
    [0, 1, 2, 3, ..., 9]

    可以通过切片轻松取出某一段数列。比如前10个数:
    print(l[:5])
    [0, 1, 2, 3, 4]

    print(l[-1::-1])
    print(l[::-1])
    [9,8,7,6,5,4,3,2,1,0]

    后5个数:
    print(l[-5:])
    [5, 6, 7, 8, 9]

    前2-4个数:
    print(l[2:5])
    [2, 3, 4]

    前6个数,每两个取一个:
    print(l[:6:2])
    [0, 2, 4]

    所有数,每2个取一个:
    print(l[::2])
    [0, 2, 4, 6, 8]

    什么都不写,只写[:]就可以原样复制一个list:
    print(l[:])
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

    tuple也是一种list,唯一区别是tuple不可变。因此,tuple也可以用切片操作,只是操作的结果仍是tuple:
    print((0, 1, 2, 3, 4, 5)[:3])
    (0, 1, 2)

    字符串'xxx'也可以看成是一种list,每个元素就是一个字符。因此,字符串也可以用切片操作,只是操作结果仍是字符串:
    'ABCDEFG'[:3]
    'ABC'
    'ABCDEFG'[::2]
    'ACEG'


    5.2、通过for循环进行查询
    for i in L1:
        print(i)

    6、补充:index()、len()、count()、sort()、reverse()、
    6.1、通过元素查索引
    print(L1.index('LiLei'))
    3

    6.2、通过len()查列表的长度
    print(len(L1))
    5

    6.3、通过count()查某元素在列表中的个数
    print(L1.count('Tom'))
    1

    6.4、从小到大排序
    L1 = [2, 3, 5, 1, 9, 8, 7, 6]
    L1.sort()
    print(L1)
    [1, 2, 3, 5, 6, 7, 8, 9]

    6.5、从大到小排序
    L1.sort(reverse=True)
    [9, 8, 7, 6, 5, 3, 2, 1]

    6.6列表元素顺序翻转
    L1.reverse()
    print(L1)
    [6, 7, 8, 9, 1, 5, 3, 2]

    6.7、sorted()函数也是一个高阶函数,它还可以接收一个key函数来实现自定义的排序,例如按绝对值大小排序:
    list = [1,3,5,-10,12,-15]
    result = sorted(list,key=abs)
    print result
    [1, 3, 5, -10, 12, -15]

    我们再看一个字符串排序的例子:
    sorted(['bob', 'about', 'Zoo', 'Credit'])
    ['Credit', 'Zoo', 'about', 'bob']

    默认情况下,对字符串排序,是按照ASCII的大小比较的,由于'Z' < 'a',结果大写字母Z会排在小写字母a的前面。现在,我们提出排序应该忽略大小写,按照字母序排序。用一个key函数把字符串映射为忽略大小写排序即可。我们给sorted传入key函数,即可实现忽略大小写的排序:
    >>> sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower)
    ['about', 'bob', 'Credit', 'Zoo']

    要进行反向排序,不必改动key函数,可以传入第三个参数reverse=True:
    >>> sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower, reverse=True)
    ['Zoo', 'Credit', 'bob', 'about']

    7、例子:

    在正向循环一个list时,如果改变了列表的大小,那么结果可能和你预想的不一样。
    L1 = [11, 22, 33, 44, 55, 66]
    将索引为奇数位置的元素删除。
    第一种:切片

    1 del L1[1::2]
    2 print(L1)
    [11, 33, 55]

    第二种:for循环会报错,因为在删除过程中列表长度会改变

    1 for ind in range(len(L1)):
    2     if ind % 2 == 1:
    3         del L1[ind]
    4 print(L1)

    结果:IndexError: list assignment index out of range

    第三种:倒叙删除,因为len(L1)为6,我们要从最后一个下标为5的值开始取,所以要从len(L1)-1开始,最后要取到下标为0,而如果写成0则取不到,所以要写成-1

    1 for ind in range(len(L1)-1, -1, -1):
    2     if ind % 2 == 1:
    3         del L1[ind]
    4 print(L1)

    [11, 33, 55]

  • 相关阅读:
    airtest支持Cocos-Creator,SDK接入
    Python的getter和setter方法
    liunx常用命令
    liunx的vim常用命令收集
    django+atx+liunx的一些shell脚本
    django+airtest+atx部署liunx平台
    Android下的鉴权实现方案
    Mate20 pro实现H265 (HEVC)实时硬件编码
    OpenCV C++常用功能介绍
    Ubuntu16.04编译libjpeg-turbo库
  • 原文地址:https://www.cnblogs.com/dxnui119/p/9829536.html
Copyright © 2011-2022 走看看