美文网首页
2018-12-29列表

2018-12-29列表

作者: 遥远的她197 | 来源:发表于2018-12-29 15:41 被阅读0次

    """
    1.什么是列表(list)
    列表是python提供的容器型数据类型。可变并且有序的
    可变 - 列表中的每个元素的值可变,列表的长度可变,列表中元素的顺序可变 (支持增删改)
    有序 - 每个元素可以通过下标来确定位置

    字符串只能存储字符,列表都行

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

    [1,2,3]
    [10,'abc',True]
    num = 100; [num,200]
    [] -- 空列表
    
    注意:python中列表元素的类型可以是任何python支持的数据类型;并且同一个列表中不同元素的类型可以不一样
    """
    # 用一个变量来保存班的成绩信息
    scores = [90, 89, 100, 67]
    print(scores)
    
    任何类型的数据都可以作为列表的元素
    list1 = [90, 10.34, 'abc', True, [1, 2, 3], {'name':'xiaoming'}]   # 有6个元素[1, 2, 3]在list1中是一个整体
    print(len(list1))  # 6
    
    list2 = [
        90,
        10.34,
        'hello',
        {'name':'xiaoming'}
    ]   # 这样表达更清楚些
    
    a = 10
    list3 = [a, 20]
    print(list3)  # [10,20]
    
    2.获取列表元素(和字符串获取字符的语法一样)

    """
    a.获取单个元素
    列表[下标] - 获取列表中指定下标对应的元素 # 和字符串下标一样的
    """

    list1 = [10, 20, 30,'abc']
    print(list1[0], list1[-1])  # 10 abc
    

    """
    b.获取部分元素(切片) - 结果是列表
    列表[开始下标:结束下标:步长]
    """

    movies = ['毒液', '功夫熊猫', '肖生克的救赎', '这个杀手不太冷', '拯救大兵瑞恩']
    print(movies[1:3])  # ['功夫熊猫','肖生克的救赎']
    print(movies[1:5:2])  # ['功夫熊猫','这个杀手不太冷']
    print(movies[3:-3:-1])   # ['这个杀手不太冷']
    print(movies[3:-3:1])   # []
    print(movies[:2])   # ['毒液','功夫熊猫']
    print(movies[2:])    # ['肖生克的救赎', '功夫熊猫', '毒液']
    print(movies[::-1])   # 列表的元素倒序
    

    """
    c.一个一个的取出所有元素(遍历)
    可以会用for循环直接遍历列表拿到每个元素;(操作元素的时候和下标无关)
    可以通过遍历列表元素对应的下标来遍历列表的元素;(操作元素的时候和下标有关)
    """

    ##### 直接遍历
    for item in movies:       # item指的是元素
        print(item)
    # 通过遍历下标遍历
    for index in range(len(movies)):
        print('下标', index)
        print(movies[index])
    
    练习:统计一个班的学生成绩,存到一个列表中。求整个班的学生的平均成绩。
    # [90, 89, 80, 70, 98, 67]
    # 打印出平均成绩
    grade = [90, 89, 80, 70, 98, 67]
    sum1 = 0
    for score in grade:
        sum1 += score
    print('平均成绩:', sum1/len(grade))   # 平均成绩: 82.33333333333333
    

    animes = ['海贼王', '火影忍者', '一人之下', '秦时明月', '画江湖']
    """
    1.增(添加列表元素)
    a.append
    列表.append(元素) - 在指定列表的最后添加指定的元素(注意:这个操作不会产生新的列表)

    b.insert
    列表.insert(下标,元素) - 在指定的下标(前)插入指定的元素

    """

    # append的使用
    animes.append('一拳超人')
    print(animes)
    # insert用法 如:在一人之下插入'犬夜叉'
    animes.insert(2, '犬夜叉')
    print(animes)
    # 在海贼王的前面插入'进击的巨人'
    animes.insert(0,'进击的巨人')
    print(animes)
    

    """
    2.删(删除元素)
    a.del
    del 列表[下标] - 删除列表中指定下标对应的元素 (只能通过下标来删除)

    注意: del是python中的关键字,可以用它删除任何东西 如:del 列表 - 删除列表

    b.remove
    列表.remove(元素) - 删除列表中第一个指定元素(因为万一有多个元素,只会删除第一个)

    注意: 被删除的元素在列表中必须是存在的

    c.pop
    列表.pop() - 将列表中最后一个元素从列表(取出),会返回取出来的元素
    列表.pop(下标) - 将列表中指定下标对应的元素从列表中(取出),会返回取出来的元素
    但对于列表来说删除了
    """

    # 删除'画江湖'
    del animes[-2]
    print(animes)   # ['进击的巨人', '海贼王', '火影忍者', '犬夜叉', '一人之下', '秦时明月', '一拳超人']
    # del animes[100]    # IndexError: list assignment index out of range(不能越界)
    
    # remove的用法
    animes = ['海贼王', '火影忍者', '一人之下', '海贼王', '秦时明月', '画江湖']
    animes.remove('海贼王')
    print(animes)   # ['火影忍者', '一人之下', '海贼王', '秦时明月', '画江湖']
    # animes.remove('死神') # 报错,元素必须是存在
    
    # pop的用法
    animes.pop()
    print(animes)   # ['火影忍者', '一人之下', '海贼王', '秦时明月']
    
    del_item = animes.pop()
    print(animes, del_item)   # 将列表中最后一个元素从列表(取出)  ['火影忍者', '一人之下', '海贼王'] 秦时明月
    
    del_item = animes.pop(2)
    print(animes, del_item)   # ['火影忍者', '一人之下'] 海贼王
    
    练习:用一个列表统计一个班的学生年龄(控制台不断输入年龄值,直到输入end为止),然后删除所有小于18岁的年龄
    # [18,20,16,15,23]
    # [18, 20, 23]
    ages = [] # 空列表,用来保存年龄
    # 解题思路1.产生年龄
    age = input('年龄:')
    while age !='end':
        # 输入一个年龄就往列表中添加一个
        ages.append(int(age))
        age = input('年龄:')    # 输入下一个年龄,如果没有这步,控制台就只会出一个年龄
    ages = [12, 13, 20, 18, 30]
    temp = ages[:]
    for age in temp:   # 用遍历找到18以下的  可以直接简写 age in ages[:] 为了能看懂
        if age < 18:
            ages.remove(age)
    print(ages)
    
    坑1:遍历列表删除部分元素,删不全! --- 遍历的时候对元列表切片 # 下面就是解释

    """

    上面看不懂为什么需要添加temp = ages[:]可以分析
    ages = [12, 13, 20, 18, 30]
    age = 12 12<18:ages.remove(12)
    用ages.remove之后就变成ages = [13, 20, 28, 30],一个新的列表
    age = 20 20< 18
    age = 18 18< 18
    age = 30 30<18
    假如继续使用它会从第二个数字(20)开始判断了会跳过13,直接变成age = 20 它是大于18的 所以不会删
    这时候我们就需要一个原来ages的长度,所以用一个变量去表示原来的长度,temp = [:](表示原来的长度)
    

    """

    将小于18的领出来,存到一个新的列表中

    """

    ages = [12, 13, 20, 18, 30, 10]
    index = rang(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]
    nuw_ages = []  # 保存被删除的元素
    index = 0
    while index < len(ages):
        age = ages[index]
        if age < 18:
            del_item = ages.pop(index)
            nuw_ages.append(del_item)
        else:
            index += 1   # 不需要删除的时候才增加
    print(ages, nuw_ages)
    
    坑二:通过下标遍历列表,删除元素的时候,下标越界和元素获取不全
    -- 解决办法: 下标对应的元素需要删除,下标值不动;不会删除下标加1
    """
    3.改(修改元素的值)
    列表[下标] == 新值  -- 修改列表中指定对应下标的值
    """
    
    list1 = [1, 2, 3]
    list1[0] = 'abc'
    print(list1)
    
    练习:有一个列表中保存的是学生的成绩,要求将列表中成绩60扥的改成'下一个班见',
    并且统计下一个班见的学生的个数
    scores = [90, 78, 59, 77, 23, 83, 45]
    count = 0
    for index in range(len(scores)):
        if scores[index] < 60:
            scores[index] = '下一个班见'
            count += 1
    print(scores, count)  # [90, 78, '下一个班见', 77, '下一个班见', 83, '下一个班见'] 3
    

    """
    1.相关运算:+, *
    列表1+列表2 - 将两个列表中的元素合并在一起产生一个新的元素
    列表*N - 列表中的元素重复N次,产生一个新的列表

    b.支持比较运算
    比较大小的原理和字符串类似

    """

    print([1, 2, 3]+ ['a','b','c'])  # [1, 2, 3, 'a', 'b', 'c']
    list1 = [1, 2, 3]
    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
    
    # 了解!()
    print([1, 2, 3, 4] > [2, 3])     # True
    print([10, 1, 2] > [2, 3])      # False
    

    """
    2.in / not in
    元素 in 列表 - 判断列表中是否存在指定的元素
    """

    print([1, 2] in [1, 2, 3])  # False
    print([1, 2] in [[1, 2], 30, 'abc'])  # 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([18, 89, 999, 2, 0.2]))  # 999
    print(min([18, 89, 999, 2, 0.2]))  # 0.2
    print(sum([18, 89, 999, 2, 0.2]))  # 1108.2
    # 求1到100的和
    print(sum(range(101)))   # 5050
    
    list1 = [1, 11, 232, 3, 1, 3]
    print(list1.count(1))  # 2 个
    

    相关文章

      网友评论

          本文标题:2018-12-29列表

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