python自学Day02(自学书籍python编程从入门到实践)
第三章 列表简介
3.1 列表是什么
- 按特定顺序排列的元素组成。
- 元素类型可以是任意数据类型。
- 元素之间没有任何的关系。
- 在python中用中括号 [] 括起来并用 ,号隔开
3.1.1 访问列表元素
- 列表是有序的集合,所以我们可以根据指定的位置找到并访问列表中的元素。
- 当你请求获取列表元素是,返回的只是值,不包括列表的符号。
#创建一个列表 存储英雄联盟中5位英雄的名字
Name = ['Ahri','Akali','Alistar','DrMundo','Delevin']
#访问第一个元素
print(Name[0])
print('列表的第一个元素索引值为0')
输出结果为
Ahri
列表的第一个元素索引值为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 使用列表中的各个值
#创建一个列表 存储英雄联盟中5位英雄的名字
Names = ['Ahri','Akali','Alistar','DrMundo','Delevin']
#依次访问列表中的每个元素
print(Names[0],Names[1],Names[2],Names[3],Names[4])
#用一句话表示你要使用的英雄,并且打印出来
#将索引值赋值为变量i,然后使用for循环 0-5范围,不包括5中依次循环
for i in range(0,5):
print('我将要使用的英雄是:'+Names[i])
输出结果为:
Ahri Akali Alistar DrMundo Delevin
我将要使用的英雄是:Ahri
我将要使用的英雄是:Akali
我将要使用的英雄是:Alistar
我将要使用的英雄是:DrMundo
我将要使用的英雄是:Delevin
3.2 修改、添加和删除元素
- 修改列表中的元素
- 往列表中添加元素
- 删除列表中的元素
3.2.1 修改列表元素
- 逻辑:首先通过索引找到指定的需要修改的元素,然后指定新的值给他
Names = ['Ahri','Akali','Alistar','DrMundo','Delevin']
#通过索引值找到第3个元素 根据之前索引的方法
Names[2] = 'raolong'
#再将赋值raolong 转换为首字母大写
Names[2]= Names[2].title()
#输出新的列表Names
print(Names)
输出结果为:
['Ahri', 'Akali', 'Raolong', 'DrMundo', 'Delevin']
3.2.2 在列表中添加元素
1.在列表末尾添加元素
- 调用 append() 方法
#创建一个列表收集用户喜欢的事情,这是个空列表
Like_things = []
#希望用户一直输入,直到自己不想输入了才停止,所以使用while True死循环
#因为判断条件永远为整所以会一直让你输入喜欢做的事情,然后添加到列表
#当用户输入 结束 就触发if条件为true 执行if下的break代码块,中断循环
while True:
Like_thing = input('请输入你喜欢做的事情:(输入结束表示结束)')
if Like_thing == '结束':
break
Like_things.append(Like_thing)
#上面循环执行结束后,执行输出
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)
输出结果为:
['New York City', 'Paris', 'London', 'Tokyo', 'Hong Kong']
['Hong Kong', 'London', 'New York City', 'Paris', 'Tokyo']
['New York City', 'Paris', 'London', 'Tokyo', 'Hong Kong']
['Tokyo', 'Paris', 'New York City', 'London', 'Hong Kong']
['New York City', 'Paris', 'London', 'Tokyo', 'Hong Kong']
['Hong Kong', 'Tokyo', 'London', 'Paris', 'New York City']
['New York City', 'Paris', 'London', 'Tokyo', 'Hong Kong']
['Hong Kong', 'London', 'New York City', 'Paris', 'Tokyo']
['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))
输出结果为:
3
python自学Day02(自学书籍python编程从入门到实践)的更多相关文章
- 《Python编程:从入门到实践》分享下载
书籍信息 书名:<Python编程:从入门到实践> 原作名:Python Crash Course 作者: [美] 埃里克·马瑟斯 豆瓣评分:9.1分(2534人评价) 内容简介 本书是一 ...
- 《python编程从入门到实践》2.3字符串
书籍<python编程从入门到实践> 2.3字符串 知识模块 print()函数,函数名称突出为蓝色,输出括号内的变量或者字符创. 变量名的命名:尽量小写字母加下划线并且具有良好的描述性, ...
- Python编程从入门到实践笔记——异常和存储数据
Python编程从入门到实践笔记——异常和存储数据 #coding=gbk #Python编程从入门到实践笔记——异常和存储数据 #10.3异常 #Python使用被称为异常的特殊对象来管理程序执行期 ...
- Python编程从入门到实践笔记——文件
Python编程从入门到实践笔记——文件 #coding=gbk #Python编程从入门到实践笔记——文件 #10.1从文件中读取数据 #1.读取整个文件 file_name = 'pi_digit ...
- Python编程从入门到实践笔记——类
Python编程从入门到实践笔记——类 #coding=gbk #Python编程从入门到实践笔记——类 #9.1创建和使用类 #1.创建Dog类 class Dog():#类名首字母大写 " ...
- Python编程从入门到实践笔记——函数
Python编程从入门到实践笔记——函数 #coding=gbk #Python编程从入门到实践笔记——函数 #8.1定义函数 def 函数名(形参): # [缩进]注释+函数体 #1.向函数传递信息 ...
- Python编程从入门到实践笔记——用户输入和while循环
Python编程从入门到实践笔记——用户输入和while循环 #coding=utf-8 #函数input()让程序暂停运行,等待用户输入一些文本.得到用户的输入以后将其存储在一个变量中,方便后续使用 ...
- Python编程从入门到实践笔记——字典
Python编程从入门到实践笔记——字典 #coding=utf-8 #字典--放在{}中的键值对:跟json很像 #键和值之间用:分隔:键值对之间用,分隔 alien_0 = {'color':'g ...
- Python编程从入门到实践笔记——if语句
Python编程从入门到实践笔记——if语句 #coding=utf-8 cars=['bwm','audi','toyota','subaru','maserati'] bicycles = [&q ...
- Python编程从入门到实践笔记——操作列表
Python编程从入门到实践笔记——操作列表 #coding=utf-8 magicians = ['alice','david','carolina'] #遍历整个列表 for magician i ...
随机推荐
- sqoop 密码别名模式 --password-alias
sqoop要使用别名模式隐藏密码 1.首先使用命令创建别名 hadoop credential create xiaopengfei -provider jceks://hdfs/user/pass ...
- istio入门教程
广告 | kubernetes各版本离线安装包 安装 安装k8s 强势插播广告 三步安装,不多说 安装helm, 推荐生产环境用helm安装,可以调参 release地址 如我使用的2.9.1版本 y ...
- quick-cocos2dx在eclipse下的lua调试
文中大部分内容来自http://cn.quick-x.com/?p=253,绿色标记部分为修改部分. 配置编译环境的基本步骤: 安装 Visual Studio 2012 安装 Java SDK 安装 ...
- 微信分享(移动web端)
create-at 2019-02-16 引入微信JS-SDK http://res.wx.qq.com/open/js/jweixin-1.4.0.js (当前最新版本) js 相关代码 (移动端实 ...
- [实践]activemq安全设置 设置admin的用户名和密码
(1)打开/opt/app/amq/apache-activemq-5.9.0/conf/jetty.xml 找到 将property name为authenticate的属性value=" ...
- Window.open使用总结
前言 今天在项目中,突然看到window.open的使用,感觉还是很神奇,突然心血来潮查看了window.open的用法. 用途 主要用于在打开网站时弹出的其他窗口.用于通知广告一类的. 用法 win ...
- laravel为模型中所有查询统一添加WHERE条件
在使用laravel开发web系统的过程,需要在model处为该模型统一添加一个条件或者多个条件,研究了一个laravel的模型类,发现model中有个方法是构建查询的,方法如下: /** * Reg ...
- Git 实用技巧:git stash
我们经常会遇到这样的情况: 正在dev分支开发新功能,做到一半时有人过来反馈一个bug,让马上解决,但是新功能做到了一半你又不想提交,这时就可以使用git stash命令先把当前进度保存起来.然后切换 ...
- sparksession创建DataFrame方式
spark创建dataFrame方式有很多种,官方API也比较多 公司业务上的个别场景使用了下面两种方式 1.通过List创建dataFrame /** * Applies a schema to a ...
- 如何使用python records 库优雅的操作数据库
今天要介绍的这个python第三方库非常厉害,完美操作各种数据库.名字叫 records, 在网上很少有这个库的相关资料,但是在开源社区可是很火热的哦.如果这还不能打消你的顾虑,再告诉你一件事:如果你 ...