python3、4章
第三章 列表简介
3.1 列表是什么
列表是由一系列按照特定顺序排列的元素组成。可以创建包含字母、数字0到9或者所有家庭信息成员的列表;也可以将指定的任何东西加入·列表中,其中的元素之间可以没有任何关系。
在python中,用方括号([])来表示列表,并用逗号来分割其中的元素。
3.1.1 访问列表元素
列表时有序集合,因此要访问列表元素,只需将该元素的位置或索引告诉python。
也可以用第二章讲的字符串方法,用title()让元素变得更整洁。
3.1.2 索引是从零开始不是从1
这个让我想起了C语言,数组也是,从0开始。如果要访问最后一个元素,我们可以把他考虑为第一个元素为0倒过来也就是最后一个元素 -1
这种约定也适用于其他负数索引,例如,索引-2就是返回倒数第二个列表的元素
3.1.3 使用列表中的各个值
可像使用其他变量一样使用列表中的各个值。例如,你可以使用拼接根据列表中的值来创建消息。
双引号之间的两边的+,我自己认为相当于说明类似地址的一种
发现一个问题,就是在变量中需要加两个+,而在打印函数只需要加一个+,(并且根据方向来)
3.2 修改,添加和删除元素
创建的大多数列表都是动态的,这意味着可以随着程序的运行增删元素。
3.2.1 修改列表元素
就是对列表的指定元素进行重新复制
mm=['hao','de','hen']
mm[0]='ni'
可以修改任何列表元素的值,不仅仅是第一个。
3.2.2 在列表中添加元素
1.在列表末尾添加元素
在列表末尾添加元素用变量名.append('添加')
mm=['hao','de','hen']
mm.append('guaiguai')
然后就变成了mm=['hao','de','hen','guaiguai']
方法append()让动态地创建列表易如反掌,例如,首先创建一个新空列表,然后使用append()语句添加元素。
mm=[]
mm.append('ni')
mm.append('max')
2.在列表中插入元素
使用insert()可在列表的任何位置添加新元素。因此,需要指定新元素的索引和值。
mm=['hao','de','hen']
mm.insert(0,'deuc')
3.2.3 从列表中删除元素
1.使用del语句删除元素
如果知道删除元素的位置,可以用del
删除后,就无法访问它了
2.使用方法pop()删除元素
方法pop()可删除列表末尾的元素,并能够接着用他。但是我们需要给他一个变量名称来进行下一次的print
pop()怎么用?
假设你买了一辆摩托车,他会指出哪一辆是最后买的
3.弹出列表中任何位置处的元素
跟2类似,即使把pop()的括号中加上元素的位置
4.根据值删除元素
有时候不知道怎么删除,如果只知道元素的值,可使用方法remove() ps:啊,这不叫函数,叫方法,原谅我前面的无知
mm=['hao','de','hen']
mm.remove('hen')
这样就把列表中的mm的hen元素删掉了
remove只是删除第一个,如果有多个,那就不能删除,得用循环
3.3 组织列表
3.3.1 使用方法sort()对列表进行永久排序
例如变量名是names,然后names.sort(),这样就是按照字母顺序来的,正的
然后就是反的,方法是names.sort(reverse=ture)
同样,这是对元素永久的排序
3.3.2 使用函数sorted()对列表进行临时排序
字面理解sorted()部是过去的状态吗,所以。。
如果想要反序,可以同样用reverse=ture在sorted()中
3.3.3 倒着打印列表
要反转列表元素,可使用方法变量名.reverse() 这个不在print中打印。。否则会出现None
这个方法也是永久的,但可以恢复,只需要再次变量名.reverse(),就行了
综合一波上面
traver_place = ['BeiJing','NanJing','XiAn','LuoYang','GuangZhou']
print(traver_place) //原来的
print(sorted(traver_place)) //可以记忆一次的正顺序
print(traver_place) //原来的
traver_place.reverse() //反转
print(sorted(traver_place)) //反转后的记忆一次的正排序
print(traver_place) //反转的打印
traver_place.reverse() // 再次反转
print(traver_place) // 再次反转的打印
traver_place.reverse() //他妈,还反转
print(traver_place) //打印还反转
traver_place.sort() //永久的正排序
print(traver_place) //打印正排序
traver_place.sort(reverse=True) // 反字母排序
print(traver_place) //打印反字母排序
3.3.4 确定列表的长度
使用函数len()可以快速获悉列表长度。
python从1开始计算函数len的长度
3.4 使用列表是避免索引错误
列表索引不能过界,否则会出现索引报错。
当列表为空时,这是索引也会报错。。
注意:发现索引错误找不到方法,尝试将列表或长度打印出来,通过查看来找出这种逻辑错误
第四章 操作列表
4.1 遍历整个列表
用for来使其更方便
4.1.1 深入地研究循环
例如书中的例子
magicians=['jack','ailisi','aishang']
for magician in magicians
但是别忘记打印(print)的时候缩进一个tab键位 这是一个for循环,让python从列表magicians中取出一个名字,并存储在变量magician中,是依次存储,依次打印。不是哗啦哗啦的一块
当执行完for循环后,要是后面没有代码,程序就结束了。
如果列表有多少元素,python就重复执行多少次。并且速度非常快
编写for时候,对于用于存储列表中每个值的临时变量,可以指定任何名称。
经常使用单数和复数可以让自己更好的识别并且判断代码处理的是单个列表元素还是整个列表元素。
4.1.2 在for循环中执行更多的操作
循环几次用官方词语说就是循环第几次迭代 不是循环第几次
在for代码后面,每个缩进的代码都是循环的一部分,且将针对列表中的每个值都执行一次
4.1.3 在for循环结束后执行一些操作
for循环结束后,一般我们需要提供总结性输出或接着执行程序必须完成的其他任务。
在for循环后面,没有缩进的代码只执行一次,并且不会重复执行。
接上面的代码
书上说使用for循环处理数据是一种对数据集执行整体操作的不错的方式。
4.2 避免缩进错误
python通过使用代码缩进让代码更易读;简单说,就是使用代码要求使用缩进代码整洁而清晰。
4.2.1 忘记缩进
对于位于for语句后面且属于循环组成部分的代码行,一定要缩进。如果忘记缩进,将会提醒你。
File "python 测试2.py", line 3
print(mm)
^
IndentationError: expected an indented block
通常,将紧跟在fo语句后面的代码行缩进,可消除这种错误
4.2.2 忘记缩进额外的代码行
由于最后一次循环迭代时最后一个jjj,所以第二个print只会打印jjj的语句
这是一个逻辑错误,从语法上看,是正确的的,但结果不符合预期结果。
4.2.3 不必要的缩进
在前面的编写程序中,我们知道只要在for循环中对每个元素执行的代码需要缩进
4.2.4 循环后不必要的缩进
和4.2.2相同,这也是逻辑错误,需要自己仔细观察才可以。
4.2.5 遗漏了冒号
遗漏会直接导致语法错误,这种错误在意料之外通常。。。。
他们会说明这种语法的无效在第几行
4.3 创建数值列表
列表非常适用于存储数字集合,而且python提供的工具,可以帮助我们高效的处理数字列表。
4.3.1 使用函数rang()
python的该函数会让我们生成一系列数字.
for value in rang(1,5)
print(value)
但是这样只会打印出1到4,函数range()让python从你指定的第一个值开始数,并在到达指定的第二个值后停止。因此输出不包含第二个值
要打印1到5
for value in rang(1,6)
print(value)
使用如果不如你所想,请+-1来证明
4.3.2 使用range()创建数字列表
要创建数字列表,可使用函数list()将range()的结果直接转化为列表。如果将range()作为list()的参数,输出将为一个数字列表
number = list(range(1,6))
print(number)
number = list(range(1,6,2))
print(number)
意思是不断加2,直到超过终值。
首先创建了一个空列表,然后用range函数让python遍历1到10.在循环中,计算当前的平方,并将结果存储到变量squres中,append是在末尾加元素,最后,循环结束,打印列表squres
还可以更简洁,可以不用临时变量squre,直接把算的值附加到列表末尾。
有时候,临时变量会让代码更易懂;而在其他情况下,这样做只会让代码无谓的变长。我们应该考虑,编写清晰易懂并且能完成所需功能的代码;等到代码审核时,在考虑采用更有效的方法。
4.3.3 对数字列表执行简单的统计计算
4.3.4 列表解析
列表解析让for循环和创建新元素的代码合成一行,并自动附加新的元素。
要使用这种语法,首先指定一个描述性的列表名,例如mm;然后,指定一个左方括号,并定义一个表达式,用于生成你要存储到列表中的值。
还有这里的for循环没有:
4.4 使用列表的一部分
处理部分元素,又称python切片
4.4.1 切片
索引是从零开始的,并且末尾的索引位置不读取
要输入三个元素,需要指定索引0~3,这样输出的分别是0、1、2的元素。
mm=['charles','jack','aila','shangxin']
print(mm[0:3])
'charles','jack','aila'
元素和索引指定不一样,就像数组的下标和位置
mm=['charles','jack','aila','shangxin']
print(mm[1:4])
'jack','aila','shangxin'
切片始于'jack',终于'shangxin'
mm=['charles','jack','aila','shangxin']
print(mm[:4])
'charles','jack','aila','shangxin'
切片没有指定第一个索引。就是从列表开头提取
同样,要让结束末尾,可以省略终止索引
负数索引返回列表末尾相应距离的元素。
假如,我们要输入最后三个成员,可以使用切片mm[-3:]
即使队员的长度变化,也不会影响输出的结果。
4.2.2 遍历切片
假如要遍历列表的部分元素,可以在for循环中使用切片。
4.4.3 复制列表
要复制列表,首先需要创建一个包含整个列表的切片,方法是
同时省略起始索引和终止索引[:]
mm=['charles','jack','a ila','shangxin']
mm1=mm[:]
如果不使用切片,直接像C语言那样复制,在后期添加的是属于两个人共同的,而不是私有的那种。
4.5 元组
有时候需要创建一系列不可修改的元素,元组可以满足这种需求
python将不能改变的值称为不可变值,不可变的列表称为元组
4.5.1 定义元组
元组看起来像列表,但是他不是用方括号,而是用圆括号来标识的。定义过之后,就可以使用索引来访问元素。
mm=('charles','jack','aila','shangxin')
并且修改会报错。但是打印的时候还是用方括号。
4.5.2 遍历元组中的所有值
像列表一样,也可以用for循环遍历元组中的所有值
4.5.3 修改元组变量
不能修改,那就给存储元组得变量赋值。可以重新定义整个元组。
mm=('ss','sdd','fff')
mm=('idea','ipad','xiaomi')
打印之后就是下面的一个新的赋值。
相比较列表,元组是更简单的数据结构。如果需要存储的一组值在程序都整个生命周期内都不变,可使用元组。
4.6 设置代码格式
使得别人和自己更容易理解和阅读
4.6.1 格式设置指南
PEP8 是最古老的PEP之一,他向python提供代码格式指南。
4.6.2 缩进
PEP8 建议每级缩进都是用4个空格,这样及提高可读性,又留下了足够的多级缩进空间
制表符和空格最好选择一个进行缩进
4.6.3 行长
每行不得超过80字符,因为在最初的计算机中终端窗口只能容纳79字符。
PEP8 还建议注释行长不得超过72字符,因为有些工具为大型项目自动生成文档,会在每行注释开头添加格式化字符。
但并不是PEP8的规矩不可逾越,有些小组将最大行长设置为99字符。
4.6.4 空行
空行不会影响代码的运行,但是会影响代码的可读性。
python根据水平缩进情况来解读代码,但不关心垂直间距