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]

  • 相关阅读:
    高斯消元学习
    HDU 4596 Yet another end of the world(解一阶不定方程)
    Codeforces Round #318 div2
    HDU 4463 Outlets(一条边固定的最小生成树)
    HDU 4458 Shoot the Airplane(计算几何 判断点是否在n边形内)
    HDU 4112 Break the Chocolate(简单的数学推导)
    HDU 4111 Alice and Bob (博弈)
    POJ 2481 Cows(线段树单点更新)
    HDU 4288 Coder(STL水过)
    zoj 2563 Long Dominoes
  • 原文地址:https://www.cnblogs.com/dxnui119/p/9829536.html
Copyright © 2011-2022 走看看