• python自学Day02(自学书籍python编程从入门到实践)


    第三章 列表简介

    3.1 列表是什么

    • 按特定顺序排列的元素组成。
    • 元素类型可以是任意数据类型。
    • 元素之间没有任何的关系。
    • 在python中用中括号 [] 括起来并用 ,号隔开

    3.1.1 访问列表元素

    • 列表是有序的集合,所以我们可以根据指定的位置找到并访问列表中的元素。
    • 当你请求获取列表元素是,返回的只是值,不包括列表的符号。
    1 #创建一个列表 存储英雄联盟中5位英雄的名字
    2 Name = ['Ahri','Akali','Alistar','DrMundo','Delevin']
    3 #访问第一个元素
    4 print(Name[0])
    5 print('列表的第一个元素索引值为0')

    输出结果为

    1 Ahri
    2 列表的第一个元素索引值为0

    3.1.2 索引从0而不是1开始

    • 切记第一个元素的索引为0.而不是1.
    #从左至右的索引是从 0 开始依次以一个单位递增
    List = [0,1,2,3,4]
    #从右至左索引是从-1开始 向左一次递减一个单位
    List_revese = [-4,-3,-2,-1]

    3.1.3 使用列表中的各个值

    1 #创建一个列表 存储英雄联盟中5位英雄的名字
    2 Names = ['Ahri','Akali','Alistar','DrMundo','Delevin']
    3 #依次访问列表中的每个元素
    4 print(Names[0],Names[1],Names[2],Names[3],Names[4])
    5 #用一句话表示你要使用的英雄,并且打印出来
    6 #将索引值赋值为变量i,然后使用for循环 0-5范围,不包括5中依次循环
    7 for i in range(0,5):
    8     print('我将要使用的英雄是:'+Names[i])

    输出结果为:

    Ahri Akali Alistar DrMundo Delevin
    我将要使用的英雄是:Ahri
    我将要使用的英雄是:Akali
    我将要使用的英雄是:Alistar
    我将要使用的英雄是:DrMundo
    我将要使用的英雄是:Delevin

    3.2 修改、添加和删除元素

    • 修改列表中的元素
    • 往列表中添加元素
    • 删除列表中的元素

    3.2.1 修改列表元素

    • 逻辑:首先通过索引找到指定的需要修改的元素,然后指定新的值给他
    1 Names = ['Ahri','Akali','Alistar','DrMundo','Delevin']
    2 #通过索引值找到第3个元素 根据之前索引的方法
    3 Names[2] = 'raolong'
    4 #再将赋值raolong 转换为首字母大写
    5 Names[2]= Names[2].title()
    6 #输出新的列表Names
    7 print(Names)

    输出结果为:

    ['Ahri', 'Akali', 'Raolong', 'DrMundo', 'Delevin']

    3.2.2 在列表中添加元素

    1.在列表末尾添加元素

    • 调用 append() 方法
     1 #创建一个列表收集用户喜欢的事情,这是个空列表
     2 Like_things = []
     3 #希望用户一直输入,直到自己不想输入了才停止,所以使用while True死循环
     4 #因为判断条件永远为整所以会一直让你输入喜欢做的事情,然后添加到列表
     5 #当用户输入 结束 就触发if条件为true 执行if下的break代码块,中断循环
     6 while True:
     7     Like_thing = input('请输入你喜欢做的事情:(输入结束表示结束)')
     8     if Like_thing == '结束':
     9         break
    10     Like_things.append(Like_thing)
    11 #上面循环执行结束后,执行输出
    12 print(Like_things)

    输出结果为:

    请输入你喜欢做的事情:(输入结束表示结束)打王者
    请输入你喜欢做的事情:(输入结束表示结束)约妹子
    请输入你喜欢做的事情:(输入结束表示结束)敲代码
    请输入你喜欢做的事情:(输入结束表示结束)打炮
    请输入你喜欢做的事情:(输入结束表示结束)结束
    ['打王者', '约妹子', '敲代码', '打炮']

    2. 在列表中插入元素

    • 调用 insert() 方法在列表的任意位置添加元素insert(索引值,新的元素)
    Names = ['Ahri','Akali','Alistar','DrMundo','Delevin']
    #调用列表insert方法 索引值为0 元素为 raolong 意思是在第一个地方插入内容 raolong
    Names.insert(0,'raolong')
    print(Names)

    输出结果为:

    ['raolong', 'Ahri', 'Akali', 'Alistar', 'DrMundo', 'Delevin']

    3.2.3 在列表中删除元素

    1.使用del语句删除元素

    • 必须要有对应的索引值
    Names = ['Ahri','Akali','Alistar','DrMundo','Delevin']
    #使用del语句删除索引0 位置处的元素
    del Names[0]
    print(Names)

    2.使用pop()方法删除元素

    • 你要在列表中删除一个值,并且你还要使用它的值。
    • pop方法是删除列表末尾的元素并且使用它
    Names = ['Ahri','Akali','Alistar','DrMundo','Delevin']
    #使用del语句删除索引0 位置处的元素
    Never_use_hero = Names.pop()
    print('英雄 '+Never_use_hero+' 被我用pop方法删除了')
    #输出pop方法调用后 原列表
    print('列表中还有如下英雄:'+str(Names))

    输出结果:

    英雄 Delevin 被我用pop方法删除了
    列表中还有如下英雄:['Ahri', 'Akali', 'Alistar', 'DrMundo']
    • 刚才直接使用拼接失败了,于是将列表调用str方法转换为字符串
    print('列表中还有如下英雄:'+Names)

    报错为:

        print('列表中还有如下英雄:'+Names)
    TypeError: can only concatenate str (not "list") to str

    3.弹出列表中任何位置处的元素

    • 在pop方法中,在括号中加入制定索引
    • pop方法拿到的元素可以到别处使用,而del语句,就是删除了。
    Names = ['Ahri','Akali','Alistar','DrMundo','Delevin']
    #我们用pop方法+指定索引值找到 蒙多医生弹出后存储为变量Choose_hero
    Choose_hero = Names.pop(3)
    print(Choose_hero)

    结果为:

    DrMundo

    4.根据值删除元素

    • 当我们不知道值对应的索引,那么我们就可以调用remove方法删除指定的元素
    • 与pop相同,我们用remove方法删除的元素值,也可以直接使用他的值
    • remove方法只能删除第一个指定的值,如果列表中有多个相同的值,我们就需要循环判断。
    #定义一个列表
    Names = ['Ahri','Akali','Alistar','DrMundo','Delevin']
    #将我们要使用remove方法删除的英雄赋值给变量Del_hero
    Del_hero = 'Alistar'
    #调用remove方法删除 'Alistar'
    Names.remove(Del_hero)
    print(Del_hero)
    print(Names)

    输出结果:

    Alistar
    ['Ahri', 'Akali', 'DrMundo', 'Delevin']
    • 书中有个误区,书中原文“使用remove方法从列表中删除元素时,也可以直接使用他的值”,我刚开始以为是直接和pop方法一样,于是乎我执行了下列代码,返回None。
    #定义一个列表
    Names = ['Ahri','Akali','Alistar','DrMundo','Delevin']
    a = Names.pop(1)
    b = Names.remove('Alistar')
    print(a,b)

    输出结果:

    Akali None
    • 这个说明在刚开始代码中,只是说我们把‘Alistar’存储到了变量中而已

    5.删除多个相同元素

    List_test = [0,1,2,1,0,4,3,5,6,7,5]
    #使用for循环迭代List_test中的值,存贮在变量i中
    for i in List_test:
    #设置条件,如果遇到0,调用remove方法执行删除元素
        if i == 0 :
            List_test.remove(0)
    #上面执行完毕后,打印删除元素后的列表
    print(List_test)

    输出结果:

    [1, 2, 1, 4, 3, 5, 6, 7, 5]

    6.练习

    #练习3-4邀请他们一起共进晚餐
    Names = ['乔布斯','巴菲特','中本聪','马云']
    for i in range(0,4):
        print('你好,'+Names[i]+'! 我想与您共进晚餐,能否赏面?')

    输出结果:

    你好,乔布斯! 我想与您共进晚餐,能否赏面?
    你好,巴菲特! 我想与您共进晚餐,能否赏面?
    你好,中本聪! 我想与您共进晚餐,能否赏面?
    你好,马云! 我想与您共进晚餐,能否赏面?
    #练习3-4邀请他们一起共进晚餐
    Names = ['乔布斯','巴菲特','中本聪','马云']
    for i in range(len(Names)):
        print(''+Names[i]+' 发出邀请')
    #习题3-5 修改嘉宾名单
    #我刚知道 乔布斯 无法赴约
    print(Names[0]+'无法赴约!')
    #替换乔布斯为 饶不死
    Names[0] = '饶不死'
    print('我们需要邀请一个新大咖'+Names[0])
    for i in range(0,4):
        print(''+Names[i]+' 发出邀请')
    #习题3-6添加嘉宾
    #找到一个新的大桌子
    print('刚刚酒店给我找了个大桌子,我想加几个人。')
    #使用insert方法在开头加一个 张余丽
    Names.insert(0,'张余丽')
    #使用insert方法在中间加一个
    Names.insert((len(Names)//2),'马化腾')
    #使用append方法在末尾加一个新的嘉宾
    Names.append('雷军')
    for i in range(0,(len(Names))):
        print(''+Names[i]+' 发出邀请')
    #习题3-7 缩减名单
    print('我只能邀请2位嘉宾!')
    print(Names)
    while True:
        Names.pop()
        if len(Names) == 2:
            break
    for i in Names:
        print(i + ' 您依然在受邀之列')
    del Names[0]
    #这里需要注意的是 删除了一个元素之后 就剩一个元素 所以依然是删除元素索引为0的值
    #在这里报错几次
    del Names[0]
    print(Names)

    输出结果为:

    向 乔布斯 发出邀请
    向 巴菲特 发出邀请
    向 中本聪 发出邀请
    向 马云 发出邀请
    乔布斯无法赴约!
    我们需要邀请一个新大咖饶不死
    向 饶不死 发出邀请
    向 巴菲特 发出邀请
    向 中本聪 发出邀请
    向 马云 发出邀请
    刚刚酒店给我找了个大桌子,我想加几个人。
    向 张余丽 发出邀请
    向 饶不死 发出邀请
    向 马化腾 发出邀请
    向 巴菲特 发出邀请
    向 中本聪 发出邀请
    向 马云 发出邀请
    向 雷军 发出邀请
    我只能邀请2位嘉宾!
    ['张余丽', '饶不死', '马化腾', '巴菲特', '中本聪', '马云', '雷军']
    张余丽 您依然在受邀之列
    饶不死 您依然在受邀之列
    []

    7.尝试优化代码

    #去除重复邀请
    Names = ['乔布斯','巴菲特','中本聪','马云'] for i in range(len(Names)): print(''+Names[i]+' 发出邀请') print(Names[0]+'无法赴约!') Names[0] = '饶不死' print('我们需要邀请一个新大咖'+Names[0]) print(''+ Names[0]+ ' 发出邀请') print('刚刚酒店给我找了个大桌子,我想加几个人。') Names.insert(0,'张余丽') Names.insert(3,'马化腾') Names.append('雷军') for i in [0,3,-1]: print(''+Names[i]+' 发出邀请') print('我只能邀请2位嘉宾!') while True: A = Names.pop() print(A+' 很遗憾您无缘本次邀请') if len(Names) == 2: break for i in Names: print(i + ' 您依然在受邀之列') del Names[0] del Names[0] print(Names)

    输出结果

    向 乔布斯 发出邀请
    向 巴菲特 发出邀请
    向 中本聪 发出邀请
    向 马云 发出邀请
    乔布斯无法赴约!
    我们需要邀请一个新大咖饶不死
    向 饶不死 发出邀请
    刚刚酒店给我找了个大桌子,我想加几个人。
    向 张余丽 发出邀请
    向 马化腾 发出邀请
    向 雷军 发出邀请
    我只能邀请2位嘉宾!
    雷军 很遗憾您无缘本次邀请
    马云 很遗憾您无缘本次邀请
    中本聪 很遗憾您无缘本次邀请
    马化腾 很遗憾您无缘本次邀请
    巴菲特 很遗憾您无缘本次邀请
    张余丽 您依然在受邀之列
    饶不死 您依然在受邀之列
    []

    8.对错误的一次测试

    Names = ['乔布斯','巴菲特','中本聪','马云']
    while True:
        Names.pop()
        print(Names.pop()+' 很遗憾您无缘本次邀请')
        if len(Names) == 2:
            break

    执行的结果:

    中本聪 很遗憾您无缘本次邀请
    • 为什么会发生这样的错误,我本意是要向删除的每一个元素进行说明
    • 原因在于我第一次执行pop方法的时候已经删除了 马云 而第二次则又删除了中本聪
    • 解决方法如下:直接在执行第一次的时候进行说明
    Names = ['乔布斯','巴菲特','中本聪','马云']
    while True:
        A = Names.pop()
        print(A +' 很遗憾您无缘本次邀请')
        if len(Names) == 2:
            break

    执行的结果:

    马云 很遗憾您无缘本次邀请
    中本聪 很遗憾您无缘本次邀请

     3.3 组织列表

    • 调整列表的顺序

    3.3.1 使用sort()对列表进行永久性排序

    • 方法sort可以永久性的修改列表元素的排列顺序。
    • 向sort方法传递参数 reverse = True 按照相反的顺序排列
    #创建一个数值列表
    Numbers = [0,7,6,8,4,3]
    #调用sort方法,进行排序
    Numbers.sort()
    #输出排序后的列表
    print(Numbers)
    #调用sort方法,传递参数reverse参数True,进行颠倒排序
    Numbers.sort(reverse=True)
    #输出颠倒后的排序列表
    print(Numbers)

    输出结果为:

    [0, 3, 4, 6, 7, 8]
    [8, 7, 6, 4, 3, 0]

    3.3.2 使用函数sorted()对列表进行临时排序

    • 函数sorted让你用特殊的排序显示列表,但是不同于sort方法,他不该表原列表元素顺序。
    • 当然与sort方法一样的是,如果你想逆转排序时,只需要传递一个参数reverse = True
    #创建一个数值列表
    Numbers = [0,7,6,8,4,3]
    #调用 sorted函数 对列表进行临时排序
    sorted(Numbers)
    #打印出列表,发现原列表元素排序并没有发生改变
    print(Numbers)

    输出结果为:

    [0, 7, 6, 8, 4, 3]
    #创建一个数值列表
    Numbers = [0,7,6,8,4,3]
    #调用 sorted函数 对列表进行临时排序并且打印出临时排序列表
    print(sorted(Numbers))
    #在sorted函数基础上传入参数 reverse = True
    print(sorted(Numbers,reverse=True))
    #打印出列表,发现原列表元素排序并没有发生改变
    print(Numbers)

    输出结果为:

    [0, 3, 4, 6, 7, 8]
    [8, 7, 6, 4, 3, 0]
    [0, 7, 6, 8, 4, 3]

    3.3.3 倒着打印列表

    • 使用reverse方法来反转列表元素的排序
    • 注意reverse方法不是按照特定的顺序反转列表,而是直接反转列表
    #创建一个数值列表
    Numbers = [0,7,6,8,4,3]
    #调用reverse方法对列表进行反转排序
    Numbers.reverse()
    #打印出进行反转排序后的结果
    print(Numbers)

    输出结果为:

    [3, 4, 8, 6, 7, 0]

    3.3.4 确定列表的长度

    • 使用len函数可以快速确定列表的长度
    • 函数len计算列表长度时是1开始
    • 索引是从0开始,0 1 2 3 ...... 而计算列表长度计数是 1,2,3,4 ......注意区分
    #创建一个数值列表
    Numbers = [0,7,6,8,4,3]
    #使用len函数确定函数列表长度,并且打印出来
    print(len(Numbers))

    输出结果为:

    6

    练习:

    #练习 3-8 放眼世界;相处至少五个你想去的地方。
    Like_places = ['New York City','Paris','London','Tokyo','Hong Kong']
    #打印原始列表
    print(Like_places)
    #使用sorted函数对列表进行临时排序,并且打印出来
    print(sorted(Like_places))
    #再次打印列表核实顺序没有改变
    print(Like_places)
    #再次使用sorted函数,按与字母相反的顺序打印这个列表
    print(sorted(Like_places,reverse=True))
    #打印原列表,核实列表顺序是否改变
    print(Like_places)
    #使用reverse方法修改列表元素的排序,并且打印该列表
    Like_places.reverse()
    print(Like_places)
    #再次使用reverse方法修改列表元素的排序
    Like_places.reverse()
    print(Like_places)
    #使用sort方法修改元素排序,使其按字母顺序排列
    Like_places.sort()
    print(Like_places)
    #再次使用sort方法,传入参数反转列表
    Like_places.sort(reverse=True)
    print(Like_places)

    输出结果为:

    1 ['New York City', 'Paris', 'London', 'Tokyo', 'Hong Kong']
    2 ['Hong Kong', 'London', 'New York City', 'Paris', 'Tokyo']
    3 ['New York City', 'Paris', 'London', 'Tokyo', 'Hong Kong']
    4 ['Tokyo', 'Paris', 'New York City', 'London', 'Hong Kong']
    5 ['New York City', 'Paris', 'London', 'Tokyo', 'Hong Kong']
    6 ['Hong Kong', 'Tokyo', 'London', 'Paris', 'New York City']
    7 ['New York City', 'Paris', 'London', 'Tokyo', 'Hong Kong']
    8 ['Hong Kong', 'London', 'New York City', 'Paris', 'Tokyo']
    9 ['Tokyo', 'Paris', 'New York City', 'London', 'Hong Kong']

    3.3 使用列表时避免索引错误

    • 引发索引错误主要原因是不在索引范围内
    • 拿到列表时,需要使用len函数确定函数长度,找到合理的索引范围
    Values = [1,3,6]
    print(Values[3])

    输出结果为:

    #返回报错,超出索引范围
    Traceback (most recent call last): File
    "D:/study/pythonwenjian/列表组织的测试.py", line 2, in <module> print(Values[3]) IndexError: list index out of range
    Values = [1,3,6]
    print(len(Values))

    输出结果为:

  • 相关阅读:
    LeetCode 到底怎么刷?GitHub 上多位大厂程序员亲测的高效刷题方式
    第 15 篇:接口的单元测试
    【译】GitHub 为什么挂?官方的可行性报告为你解答
    微服务常用的几种部署方式——蓝绿部署,滚动升级,灰度发布/金丝雀发布
    .net生成PDF文件的几种方式
    读取私有字体信息并进行相关判断
    Windows Locale Codes
    总结C#获取当前路径的7种方法
    Devexpress aspxgridview oncustomcallback 无刷新更新数据
    ArcGIS Pro 版本、版本号、发布年代
  • 原文地址:https://www.cnblogs.com/raoqinglong/p/11486725.html
Copyright © 2020-2023  润新知