从这里开始,Python逐渐变得有趣,也有用起来。但我不想解释为啥第2章和第3章的学习之间居然整整相隔一个月……
眼过千遍不如手过一遍——俺奶说的。
所以,继续坚持学习,继续坚持做笔记。(因为不像中小学那种随堂听课,所以我是先阅读,再练习,最后整理笔记)
第3章 列表简介
列表(list)是个很有用也很常用的东西,Python的列表用方括号[ ]
包围,并以逗号,
分隔元素。
列表中的元素可以是任何东西,元素之间可以没有任何关系。
注意!列表在创建时可以是空的,只有[ ]但不含有任何元素,这点与变量不同,变量在被创建时必须同时被赋值。
列表名 = [ 元素1 , 元素2 , 元素3 , ... ]
3.1.1 访问列表元素
airen=['laopo','erzi','mama']#字符串元素同样需要引号包围,单双均可,为了方便用单引号。
学到这里,我把列表理解为带有多个元素的变量。
访问列表中的元素要使用其索引。Python的列表索引从0开始,不是从1开始,列表中第1个元素的索引是0,第2个元素的索引是1,记得要“差一”。
也可以从后向前索引,最后一个元素是-1,倒数第二个是-2。#这里不存在“差一”
print(airen)#这行代码没错,也能正常运行,不过输出结果你不会喜欢。
输出结果为:[‘laopo’,’erzi’,’mama’],就是列表本身的全部。
print(f"{airen[0].title()}、{airen[1].title()}和{airen[-1].title()}是我的最爱!")
输出:Laopo、Erzi和Mama是我的最爱!
3.2 修改、添加和删除元素
修改列表元素,就像给变量赋值,只要加上元素索引即可。
元素名 [ 索引值 ] #访问列表元素
airen[0]='老婆'#中国人还是用中文名称舒服点。
print(f"{airen[0].title()}、{airen[1].title()}和{airen[-1].title()}是我的最爱!")
airen[1]='儿子'
airen[-1]='妈妈'
print(f"{airen[0].title()}、{airen[1].title()}和{airen[-1].title()}是我的最爱!")
print(f"{airen[0]}、{airen[1]}和{airen[-1]}是我的最爱")#中文名字符串,title()等方法无效。
3.2.2 添加元素
有两种方法:append() 向列表末尾追加一个新元素,insert() 则向指定索引位置插入一个。
列表名 . append ( ' 元素值 ' ) #列表末尾追加新元素
列表名 . insert ( 索引值 , 元素值 ) #在指定位置插入新元素
airen.append('猫咪')#列表末尾追加元素
airen.insert(1,'狗狗')#索引1处插入元素
print(airen)#现在列表有5个元素了。
insert()方法中必须有索引参数,且原有的索引都会从此向后移动一个位置,假如你在[-2]
处插入新元素,那么原有的-2、-1会右移一位,空出-2这个位置给新元素。实际上你插入的-2,最终为成为新列表的[-3]
。
3.2.3 删除元素
同样有两种方法,del语句 和 pop()方法。
del语句删除的元素将不再存在,不可访问。如:del airen[1],将会使得列表中的元素’狗狗’被彻底删除,不能再访问。
而pop()方法(术语叫:弹出)可将元素从列表中取出,但仍可以访问。
注意!弹出一个元素时,记得把它放进另一个地方你才能再次访问它。如果你弹出它,却不保留它,那它只能流进异次元了。
del 列表名 [ 索引值 ] #删除指定位置元素
列表名 . pop ( ) #弹出列表末尾元素
列表名 . pop ( 索引值 ) #弹出指定位置元素
buai=airen.pop(1)#这里指定索引,弹出列表的第二个元素,并将其保存到另一个变量buai。
print(airen)#可以看到弹出后列表中只剩下4个元素。
print(f"{airen[0]}、{airen[1]}、{airen[2]}和{airen[-1]}是我的最爱!")
print(f"其实,我并不是很喜欢{buai}……")#但之前弹出并存入buai的'狗狗'仍然可以访问。
注意!不带任何参数的pop()方法,将弹出列表末尾的元素,有时这很有用,有时却很糟糕,因为,末尾也可能是你用append()方法追加的最新元素。
根据元素的值删除元素,往往可能是更常用的。因为有时候你知道要删除什么,但并不知道它的索引位置。
remove()方法就是干这个用的。
列表名 . remove ( 变量名/元素值 ) #从变量名获取值或直接输入值,删除列表中对应的第一个元素。
airen.insert(1,'狗狗')#让我暂时将狗狗添加回去(假装你没有看到那个索引1)。
print(airen)#这时的列表又变回5个元素了。
buai='狗狗'#继续加装,我知道要删除什么,却不知道它的索引。
airen.remove(buai)#这括号里是变量名,不是字符串本身,不要再加引号了TT……
print(airen)
print(f"好吧,我的确不太喜欢{buai}。")#remove()方法移除的元素,
#同样可以赋值给其他变量保存起来使用,像append()方法一样。
注意!remove()方法删除的是第一个指定的值,如果列表中有多个’狗狗’,它只会删除第一个,要删除多个重复值,等学了循环再回来(据说在第7章)。
很显然,像变量一样,列表间同样可以互相传递数据,这里传递的是整个元素。我可以从一个列表弹出某个元素到另一个列表去。
aihao=['摄影','阅读','水晶虾']#我的三大业余爱好
airen.append(aihao.pop())#将爱好的最后一项弹出并追加至爱人的最后一项。
既然可以创建一个空列表,当然,也可以将列表元素逐一删除或弹出,最后还留下一个空列表。
时间不早了,休息【20231112】
列表建传递数据的实测
首先尝试了用remove()方法将一个列表的某元素直接移动到另一个列表的末尾,但是失败了。
airen=['laopo','erzi','mama']
zhangbei=[]
zhangbei.append(airen.remove('mama'))
该例的输出结果中,mama被正确的从airen列表中移除,但并没有正确追加到zhangbei列表,经查询得知,
remove()方法并不会返回被移除元素的值,而是返回None
所以,执行后的zhangbei列表的print结果为[None]。
就是说,remove()方法可以用来移除元素,但并不能将其值赋值到其他元素或变量。
等于是我把remove()方法用反了,它可以从其他变量获取值,已确定要移除的元素,但并不会将值保留下来。
要实现一行代码,一步到位的列表建元素移动,目前最有效的方法就是pop()。他可以实现一步到位,前提是需要知道索引,或者从列尾移动。例如:
airen=['laopo','erzi','mama']
zhangbei=[]
zhangbei.append(airen.pop())#这句可以正确将mama从airen移动到zhangbei。
实际运用中要注意这个问题!
3.3 管理列表
这里学到的“管理”主要指列表的顺序调整,可以是按照数字和字母顺序的正序和逆序,也可以是按照列表本身元素位置顺序的正向或逆向。
sort()方法用于永久排列,默认正序,排序后列表的原始状态将不再存在。
给sort()方法传递参数reverse=True,可以实现永久逆序排列。
reverse()方法也用于永久排列,他将反向重新排列所有元素的位置顺序,但并不会根据字母顺序进行排序,所以,reverse()方式是列表逆向,而不是逆序。
函数sorted(),则用于临时排序,同样支持正序和逆序,用的参数同样是reverse=True
,这里要在练习时犯过一个错误——函数和方法的代码语法是不同的。
列表名 . sort ( ) #列表元素 永久 正序排序
列表名 . sort ( reverse = True ) # 永久 逆序排序
列表名 . reverse ( ) #列表元素 永久 逆向排列,重复该方法可恢复原状
sorted ( 列表名 ) #该函数可以 临时 正序排序
sorted ( 列表名 , reverse = True ) #该函数也可以使用参数,获得 临时 逆序排序结果,
#注意函数的参数使用语法。
airen.sort()#将该列表元素,永久按照正序排序
airen.sort(reverse=True)#将列表元素永久逆序排序。
#注意!这里的True是Python关键字,必须按照首字母大写的形式书写。
airen.reverse()#将列表中元素从未到头重新排列。
airen.reverse()#虽说该方法也是永久排序,但再次执行,就等于恢复原状了。
sorted(airen)#用函数对列表进行临时排序,只影响输出结果,不影响列表原顺序。
sorted(airen,reverse=True)#该函数同样可以使用逆序参数,
#放在逗点 , 后面用作函数的第二个参数即可。
截至目前,可以先简单总结为:方法是要用点号.
跟在变量名或列表名即对象后面的;如:airen.sort()
是对airen使用sort()方法。而:sorted(airen)
则是调用sorted()
函数,其对象为airen
。这个说法目前自己也觉得不太妥当,相信后面会学到真正的区别。
len()函数用于获取列表的长度,即列表中元素的总个数,Python在计算列表元素个数时,从1开始,这里没有“差一”问题。len(airen)
会简单的返回一个值:3
。至于用来干什么就随意了。
比如可以用来求总人数、总件数、总次数等等……
3.4 使用列表时要注意索引错误
- Python的索引是从0开始,第一个元素的索引是0,而不是1。
- 最后一个元素的索引是-1,从末尾开始访问不存在“差一”。
- 从后往前访问时,用[-1]一定不会错。