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))

输出结果为:

猜你喜欢

转载自www.cnblogs.com/raoqinglong/p/11486725.html