美文网首页1~10
06 list列表和相关运算

06 list列表和相关运算

作者: 贺夕 | 来源:发表于2019-01-02 20:56 被阅读0次

    ====== list列表 ======

    1. 什么是列表(list)

    列表是Python提供的容器型数据类型,可变并且有序的

    可变 —— 列表中的每个元素的 值 可变;列表中的 长度 可变;列表中元素的 顺序 可变(支持 增 删 改)

    有序 —— 每个元素可以通过 下标 来确定位置

    2. 列表的字面量:通过[]括起来,里面有多个元素,每个元素用逗号隔开

    [1,2,3]     # 1为一个元素
    [10, 'abc', True]  # 'abc'为一个元素
    num = 100; [num, 200]  # nun为一个元素
    

    [] —— 空列表

    注意:列表元素的类型可以是任何Python支持的数据类型;并且同一列表中不同元素的类型可以不一样

    scores = [10, 20,30,40]
    print(scores)   # [10, 20, 30, 40]
    

    任何类型的数据都可以作为列表的元素

    list1 = [11, 10.22, 'abc', True, [1, 2, 3], {'a' : 10}, lambda x : 2*x]  # 总共7个元素,长度为7
    print(len(list1))  # 取其长度
    
    list2 = [
        10,
        11.434,
        'hello',
        {'name' : '小明'}
    ]
    
    a = [1, 10]
    list3 = [a , 20]
    print(list3)  # [[1, 10], 20]
    

    获取列表元素(和字符串获取字符的语法一样)

    a. 获取单个元素

    列表[下标] —— 获取列表中指定下标对应的元素

    list1 = [10, 20, 30, 'abc']
    print(list1[0], list1[-1])  # 10 abc  获取第一个元素,和最后一个元素
    

    b. 获取部分元素(切片) —— 结果是列表 # 无论是否切到

    列表[开始下标:结束下标:步长]

    注意:取不到的时候,结果是空列表

    moves = ['豆豆', '花花', '蓝蓝', '红红', '白白']
    print(moves[1 : 3])     # ['花花', '蓝蓝']
    print(moves[1 : 5 :2])  # ['花花', '红红']
    print(moves[3 : -3 : -1])  # ['红红']
    print(moves[3 : -3 : 1])   # []
    print(moves[ : 2])      # ['豆豆', '花花']
    print(moves[2 : ])      # ['蓝蓝', '红红', '白白']
    print(moves[2 : : -1])  # ['蓝蓝', '花花', '豆豆']
    print(moves[ : : -1])   # ['白白', '红红', '蓝蓝', '花花', '豆豆']
    

    c. 一个一个的取出所有元素(遍历)

    可以使用for循环直接遍历列表拿到每个元素(操作元素的时候和下标 无关 )

    可以通过遍历列表元素对应的下标来遍历列表元素(操作元素的时候和下标 有关 )

    # 直接遍历
    for item in moves :
        print(item)
    # 豆豆
    # 花花
    # 蓝蓝
    # 红红
    # 白白
    
    # 通过遍历下标遍历
    for index in range(len(moves)) :
        print('下标', index)
        print(moves[index])
    # 下标 0
    # 豆豆
    # 下标 1
    # 花花
    # 下标 2
    # 蓝蓝
    # 下标 3
    # 红红
    # 下标 4
    # 白白
    
    练习:统计一个班的学生成绩,存到一个列表里面,求整个班学生的平均成绩。
    # [90, 89, 80, 70, 98, 67]
    # 打印出平均成绩
    scores = [90, 89, 80, 70, 98, 67]
    total = 0
    for score in scores :
        total += score    # 求总和
    
    print('平均成绩', total / len(scores))  # 平均成绩 82.33333333333333
    

    ====== 增、删、改 ======

    1. 增(添加列表元素)

    a. .oppend

    列表.oppend(元素) —— 在指定的 列表 的最后添加指定的 元素

    b. .insert

    列表.insert(下标,元素) —— 在指定的 下标前 插入指定的元素
    animes = ['一人之下', '火隐忍者', '斗破苍穹', '尸兄']  # animes是 动漫 的意思
    animes.append('七龙珠')
    print(animes)   #['一人之下', '火隐忍者', '斗破苍穹', '尸兄', '七龙珠']  增加'七龙珠到'animes当中
    
    animes.insert(2,'犬夜叉')  # 添加到下标为2(斗破苍穹)之前
    print(animes)  # ['一人之下', '火隐忍者', '犬夜叉', '斗破苍穹', '尸兄', '七龙珠']
    

    2.删(删除元素)

    a. del

    del 列表[下标] —— 删除列表中指定下标对应的元素
    注意:del是Python中的关键字,可以用它删除任何数据,这儿的下标不能越界

    b. remove

    列表.remove(元素) —— 删除列表中第一个指定元素
    注意:被删除的元素在列表中必须是存在的

    c. .pop

    列表.pop() —— 将列表中最后一个元素 取出,会返回取出来的元素
    列表.pop(下标) —— 将列表中 指定下标对应的元素 从列表中取出,会返回取出来的元素

    del的使用

    # del animes[-100]  # 下标不可越界,报错
    del animes[-2]  # 删除下标为-2(尸兄)
    print(animes)   # ['一人之下', '火隐忍者', '犬夜叉', '斗破苍穹', '七龙珠']
    

    remove的使用

    animes = ['一人之下', '火隐忍者', '一人之下', '斗破苍穹', '尸兄']  # animes是 动漫 的意思
    animes.remove('一人之下')  # 删除列表中第一个指定元素'一人之下'
    # animes.remove('死神')  # 被删除的元素在列表中必须是存在的,报错ValueError: list.remove(x): x not in list
    print(animes)  # ['火隐忍者', '一人之下', '斗破苍穹', '尸兄']
    

    pop的使用

    del_item = animes.pop()
    print(animes, del_item)  # ['火隐忍者', '一人之下', '斗破苍穹'] 尸兄
    
    del_item = animes.pop(0)
    print(animes, del_item)  # ['一人之下', '斗破苍穹'] 火隐忍者
    
    练习:用一个列表统计一个班的学生年龄(控制台不断输入年龄值,直到输入end为止),然后删除所有小于18岁的年龄
    # [12, 20, 16, 15, 23]  产生列表
    # [18, 20, 23]   删除小于18岁的年龄
    ages = []  # 生成一个空列表保存年龄
    age = input('请输入年龄:')  # 产生年龄
    while age != 'end' :
        ages.append(int(age))  # 输入一个年龄就往列表中添加一个
        age = input('请输入年龄:')  # 输入下一个年龄
    # print(ages)  # [12, 13, 20, 18, 30]
    
    ★坑1:遍历列表删除部分元素,删不全! —— 遍历的时候对元列表切片
    ages = [12,13, 20, 18, 30]
    age = 12  12 < 18 : ages.remove(12)
    ages = [13, 20, 18, 30]
    age = 20  20 <18
    age = 18  18 <18
    age = 30  30 <18
    

    ages = [12,13, 20, 18, 30]
    temp = ages[ : ]
    for age in temp :
        if age < 18 :
            ages.remove(age)
    print(ages)  # [20, 18, 30]
    # 或
    # 简写
    ages = [12,13, 20, 18, 30]
    for age in ages[ : ] :
        if age < 18 :
            ages.remove(age)
    print(ages)  # [20, 18, 30]
    
    将小于18岁的拎出来,存到新的列表中
    ★坑2:通过下标遍历列表,删除元素的时候,下标越界和元素获取不完整
    解决办法 —— 下标对应的元素需要删除,下标值不动,不会删除下标加1
    ages = [30,12, 13, 20, 18, 30, 10]
    index = range(6) = 0 ~ 5
    index = 0   age = 12  ages = [13, 20, 18, 30, 10]
    index = 1   age = 20  ages = [13, 20, 18, 30, 10]
    index = 2   age = 18
    index = 3   age = 30
    index = 4   age = 10  ages = [13, 20, 18, 30]
    index = 5   越界!
    
    # ages = [12,13, 20, 18, 30, 10]
    # for index in range(len(ages)) :
    #     age = ages[index]
    #     if age < 18 :
    #         ages.pop(index)
    # print(ages)
    

    ages = [12,13, 20, 18, 30, 10]
    new_ages = []  # 保存被删除的元素
    index = 0
    while index < len(ages) :
        age = ages[index]
        if age < 18 :
            del_item = ages.pop(index)
            new_ages.append(del_item)
        else :
            index += 1  # 不需要删除的时候下标才增加
    
    print(ages, new_ages)  # [20, 18, 30] [12, 13, 10]
    

    3. 改(修改元素的值)

    列表[下标] = 新值 —— 修改列表中指定下标对应的值
    list1 = [1, 2, 3]
    list1[0] = 'abc'   # 1的下标为0
    print(list1)  # ['abc', 2, 3]
    
    练习:有一个列表中保存的是学生的成绩,要求将列表中成绩小于60分的改成'抄十遍试卷'
    scores = [90, 78, 50, 77, 23, 82, 45]
    count = 0
    for index in range(len(scores)) :
        if scores[index] < 60 :
            scores[index] = '抄十遍试卷'
            count += 1
    print(scores, count)  # [90, 78, '抄十遍试卷', 77, '抄十遍试卷', 82, '抄十遍试卷'] 3
    

    ====== 列表的相关运算 ======

    1.相关运算:+,*

    a.数学运算

    列表1+列表2 —— 将两个列表中的元素合并在一起产生一个新的列表
    列表*N —— 列表中的元素重复N次,产生一个新的列表

    b.支持比较运算

    比较大小的原理和字符串类似
    list1 = [1, 2, 3]
    list2 = ['a', 'b', 'c']
    print(list1 + list2)  # [1, 2, 3, 'a', 'b', 'c']
    print(list1 * 2)  # [1, 2, 3, 1, 2, 3]
    
    print([1, 2, 3] == [2, 1, 3])  # False
    print([1, 2, 3] == [1, 2, 3])  # True
    
    # ★了解!
    

    2. in / not in

    元素 in 列表 —— 判断列表中是否存在指定的元素
    print([1, 2] in [1, 2, 3])  # False
    print([1, 2] in [[1, 2], 30, 'abc'])  # True
    print('abc' in [10, 'abc', True])  # True
    

    3.len

    len(列表) —— 获取列表中元素的个数
    print(len([[1, 'a'], 2, '100', True]))  # 4
    

    4.list

    list(数据) —— 将其它数据转换成列表;只有 序列 才可以转换成列表,转换的时候就是将序列中所有的元素转换成列表的元素

    ★注意 list = 10 # 不能用Python给我们提供的类型的名字来命名,否则后期会有隐患

    list1 = list('hello')
    print(list1)  # ['h', 'e', 'l', 'l', 'o']
    
    list2 = list(range(11, 21))
    print(list2)  # [11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
    

    5.序列的其它方法

    max(序列) —— 获取序列中值最大的元素

    min(序列) —— 获取序列中值最小的元素

    sum(序列) —— 求序列中所有元素的和

    注意:以上三种方法,要求序列中的元素类型必须一致,并且这个类型支持比较运算和加法运算(一般数字序列用)
    print(max([19, 89, 999, 2, 0.2]))  # 999
    print(min([19, 89, 999, 2, 0.2]))  # 0.2
    print(sum([19, 89, 999, 2, 0.2]))  # 1109.2
    print(sum(range(101)))  # 5050
    
    示范
    list1 = [1, 2, 3, 1, 100, 20, 30, 1]
    print(list1.count(1))  # 3
    
    list1.extend(['abc', 100])
    print(list1)  # [1, 2, 3, 1, 100, 20, 30, 1, 'abc', 100]
    
    list1.extend('abc')
    print(list1)  # [1, 2, 3, 1, 100, 20, 30, 1, 'abc', 100, 'a', 'b', 'c']
    
    list1 = [1, 2, 100, 3, 1, 100, 20, 30, 1]
    print(list1.index(100))  # 2
    
    list1.reverse()
    print(list1)  # [1, 30, 20, 100, 1, 3, 100, 2, 1]
    
    list1 = [1, 2, 100, 3, 1, 100, 20, 30, 1]
    list1.sort()
    print(list1)  # [1, 1, 1, 2, 3, 20, 30, 100, 100]
    
    list1 = [1, 2, 100, 3, 1, 100, 20, 30, 1]
    list1.sort(reverse=True)
    print(list1)  # [100, 100, 30, 20, 3, 2, 1, 1, 1]
    
    list1.clear()
    print(list1)  # []
    
    list1 = [1, 2, 100, 3, 1, 100, 20, 30, 1]
    list2 = list1.copy()
    list3 = list1[:]
    print(list2, list3)  # [1, 2, 100, 3, 1, 100, 20, 30, 1] [1, 2, 100, 3, 1, 100, 20, 30, 1]
    print(id(list1), id(list2), id(list3))  # 34096432 34776568 34776648
    

    相关文章

      网友评论

        本文标题:06 list列表和相关运算

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