列表是什么
列表是由一系列按特定顺序排列的元素组成,在python中使用[]括号来表示列表,并用逗号来分隔其中的元素。
例:
heros = ['an琪拉',"鲁班7号","亚瑟"]
print(heros)
访问列表元素
列表是有序集合,因此要访问列表的任何元素,只需要将元素的位置或索引告诉python即可,,要访问列表元素,可以指定列表名称,再指出元素的索引,将其放在方括号内。
例:
heros = ['an琪拉',"鲁班7号","亚瑟"]
print(heros[0])
#访问列表元素的语法,当你请求列表元素时,python返回该元素,但是不包括括号和引号。
还可以使用之前学到的转换字符串大小写,用来格式化;
例:
heros = ['an琪拉',"鲁班7号","亚瑟"]
print(heros[0].title())#首字母进行了大写
索引是从0开始而不是1
在python中,第一个列表元素的索引为0,而不是1。在大多数编程语言中都是如此,这与列表操作的底层实现相关。
第二个列表元素的索引为1,根据这种简单的计数方式,要访问任何元素,都可以在其位置减1,并将结果作为索引。例:要访问第4个元素,使用的索引为3。
例:
heros = ['an琪拉',"鲁班7号","亚瑟",'兰陵王']
print(heros[3])
python为访问最后一个元素提供了特殊的语法。可以通过负索引,来返回列表的最后一个元素。
例:返回最后一个元素
heros = ['an琪拉',"鲁班7号","亚瑟",'兰陵王']
print(heros[-1])
print(heros[-2])#返回倒数第二个元素,以此类推
使用列表中的各个值
可以像使用其他变量一样使用列表中的各个值。例如,你可以使用拼接根据列表中的值来创建消息。
例:
heros = ['an琪拉',"鲁班7号","亚瑟",'兰陵王']
message7 = ' 是新手很喜欢的英雄'
print(heros[-1] + message7)
练习:
#练习20 将一些朋友的姓名存储在一个列表中,将其命名为names 依次访问列表中的每个元素,
# 从而将每个朋友姓名依次打印出来
names = ['jack','luse','li','may']
print(names[0],names[1],name[2],name[3])
#练习21 问候语,继续使用姓名列表,
# 但是不打印每个人的姓名,而是给每个人打印一条消息。每条消息都包含相同的问候语
names = ['jack','luse','li','may']
print(names[0] + ' 新年快乐')
print(names[1] + ' 新年快乐')
print(names[2] + ' 新年快乐')
print(names[3] + ' 新年快乐')
#练习22 自己的列表,想想自己喜欢的通勤方式,例如骑摩托车或者开汽车,
# 并创建一个包含多种通勤方式的列表,根据该列表打印一个有关通勤方式的宣言
commuting_mode = ['drive a car','Cycling' ,'run']
print(commuting_mode[0] + ' 时间最短')
print(commuting_mode[1] + ' 速度第二')
print(commuting_mode[2] + ' 速度最慢')
修改、添加、删除元素
修改列表元素
修改列表元素与访问列表元素语法类似。要修改的列表元素,可以指定列表名和要修改的元素索引,再指定该元素的新值。
例:
heros = ['安琪拉','亚瑟','李白']
heros[0] = '鲁班'
print(heros)#此时输出结果,列表的第一个元素变成了鲁班
在列表末尾添加元素
在列表中添加新元素时,最简单的方式是将元素附加到列表末尾。给列表附加元素时,默认添加到列表末尾。
例:
heros = ['安琪拉','亚瑟','李白']
heros.append('项羽')
print(heros)#此时输出,可以看到项羽被添加到列表的最后
创建一个空列表, 将元素全部添加到列表中
例:
heros = []
heros.append('钟馗','虞姬','阿古朵','司空震')
print(heros)#此时报错ypeError: list.append() takes exactly one argument (4 given),因为append一次只能添加一个元素
修改后:
heros = []
heros.append('钟馗')
heros.append('司空震')
heros.append('阿古朵')
heros.append('虞姬')
print(heros)
在列表中插入元素
使用方法insert()可以在任何位置添加新元素。为此,需要指定新元素的索引值。
例:
heros = ['安琪拉','亚瑟','李白']
heros.insert(1,'孙斌')
print(heros)#此时输出,索引1变成了孙斌,其他元素向右移了一位
从列表中删除元素
●使用del语句删除元素
知道删除的元素在列表中的位置,可以使用del语句删除
例:
heros = ['安琪拉','亚瑟','李白']
del heros[0]
print(heros)
注意:使用del删除元素后,就无法再访问到元素了
●使用方法pop()弹出元素
如果想把元素从列表中删除,但是还需要使用它的值,可以使用pop方法进行删除,默认删除列表最后一个元素。
因为列表就像是一个栈,删除列表末尾的元素相当于弹出栈顶元素。
例:
heros = ['安琪拉','亚瑟','李白']
heros_pop = heros.pop()#删除的元素可以赋值给新的变量
print(heros_pop)
弹出列表中的任何位置的元素
在pop()方法中指定元素的索引即可弹出任何位置的元素
例:
heros = ['安琪拉','亚瑟','李白']
heros.pop(1)#弹出列表第2个元素
print(heros)
通过事例,我们可以根据使用场景,选择删除元素,还是弹出元素。
根据值删除元素
有时候,我们不知道列表中要删除元素的位置,只知道要删除的元素。可以使用remove()方法。
例:
heros = ['安琪拉','亚瑟','李白']
heros.remove('李白')
print(heros)#可以看到元素值为李白的元素被删除
注意:
•remove方法也是弹出,弹出后的值可以存储到变量中。
•remove只能删除一次,如果列表中出现多次要删除的值,需要循环删除。
练习:
#练习31 如果你可以邀请任何人一起共进晚餐,你邀请那些人?请创建一个列表,其中包含3个你要邀请的人,
# 然后使用这个列表打印消息,邀请这些人来与你共进晚餐
names = []
names.append('老王')
names.append('老张')
names.append('老李')
print(names)
print(names[0] + ' 来吃饭')
print(names[1] + ' 来吃饭')
print(names[2] + ' 来吃饭')
print(names[0] + ' 有事儿,不能来吃饭')
#练习32 修改要求嘉宾名单,你刚得知有一个嘉宾无法参加,因此需要邀请另一位。
# 修改邀请名单 将无法参加的嘉宾,更换
# 再打印一次邀请
names[0] = '老吴'
print(names[0] + ' 来吃饭')
print(names[1] + ' 来吃饭')
print(names[2] + ' 来吃饭')
print('找到了一个大的餐桌,所以可以再来三个人')
#练习33 得到消息,有了一个大的包间,还可以再邀请3位
names.insert(0,'老刘')#老刘在第一位
names.insert(0,'老钱')#老钱在最新的人前
names.append('老赵')#老赵最后
print(names[0] + ' 来吃饭')
print(names[1] + ' 来吃饭')
print(names[2] + ' 来吃饭')
print(names[3] + ' 来吃饭')
print(names[4] + ' 来吃饭')
print(names[5] + ' 来吃饭')
print('因为食材不足,只能邀请两人了')
#练习34 缩减名单,因为新购买的食材不足
# 在33练习后,打印一条消息,只能邀请两人用餐。
# 使用pop不断的弹出嘉宾,直到剩下两人,每次弹出消息都要发送抱歉
a= names.pop()
print(a + '抱歉')
b = names.pop()
print(b + '抱歉')
c = names.pop()
print(c + '抱歉')
d = names.pop()
print(d + '抱歉')
#对于剩下的两位,每一位打印一条消息
print(names[0]+ ' 来吃饭')
print(names[1] + ' 来吃饭')
#使用del将最后两位嘉宾,程序结束时,名单为空
del names[0]
del names[0]
print(names)
组织列表
在创建列表中,元素的顺序是无法预测的,所以需要对列表进行排序。
使用sort()方法对列表进行永久排序
python中的sort()方法可以对列表进行排序。
例如:
我们有一个英雄列表,想让英雄按照字母进行排序
heros = ['ya瑟','an琪拉','zhong馗','lu班']
print(heros)
heros.sort()
print(heros)
print(heros)
注意:sort()方法是永久排序
也可以使用sort()方法进行倒叙,sort()方法提供了reverse=True。
heros = ['ya瑟','an琪拉','zhong馗','lu班']
print(heros)
heros.sort(reverse=True)
print(heros)
print(heros)
使用函数sorted()对列表进行临时排序
要保留列表元素原来的排列顺序,可以使用函数sorted()。
例:
heros = ['ya瑟','an琪拉','zhong馗','lu班']
print(sorted(heros))
print(heros)#原始列表顺序未更改
sorted()方法也支持倒叙,可以传入reverse=True
倒着打印列表
想要反转列表元素的排列顺序,可以使用reverse()
例:
heros = ['ya瑟','an琪拉','zhong馗','lu班']
print('原始数据',heros)
heros.reverse()
print(heros)
注意:reverse()方法不是按照字母进行排序,而是直接将列表倒过来
确定列表的长度
使用函数len()方法,可以快速获取列表的长度。
heros = ['ya瑟','an琪拉','zhong馗','lu班']
print(len(heros))#可以看到输出元素长度为4
注意:len()方法的计算是从1开始,所以不需要 +1
练习:
#放眼世界,想出5个想要去的国家
#将这些国家放在一个列表中,并确保国家不是按照字母顺序排列的
countrys = ['U.S.A', 'Germany','U.S','Japan','India']
#按原始排序打印该列表,不要考虑输出是否整洁
print(countrys)
#使用sorted()安字母顺序打印这个列表,同时不要修改它
print(sorted(countrys))
#再次打印该列表,核实排列顺序未变
print(countrys)
#使用sorted()按照字母顺序相反的顺序打印这个列表,同时不要修改它
print(sorted(countrys,reverse=True))
#再次打印该列表,核实排列顺序未改变
print(countrys)
#使用reverse()方法修改列表元素排列顺序,打印该列表,核实排列顺序改变
countrys.reverse()
print(countrys)
#再使用reverse()方法修改元素排列顺序,打印该列表,核实已经恢复到原来的排列顺序
countrys.reverse()
print(countrys)
#使用sort()修改该列表,使其元素按照字母顺序排列,打印该列表,核实排列顺序确实变了
countrys.sort()
print(countrys)
#使用sort()修改该列表,使其元素按照与字母顺序相反的顺序排列,打印该列表,核实排列顺序确实变了
countrys.sort(reverse=True)
print(countrys)
扩展:
尝试用各个函数,储存到列表,如:山丘,河流,城市,美食,或是你喜欢的任何东西,要求使用所有学到的函数来处理这个列表。
操作列表
你已经学习了操作列表中的元素,现在你可以学习如何遍历整个列表,这样只需要几行代码,无论多长的列表,都能高效的处理。
遍历整个列表
现在我们使用for循环进行遍历列表。
例:
countrys = ['U.S.A', 'Germany','U.S','Japan','India']
for country in countrys:
print(country)
深入研究循环
理解循环的概念很重要,因为它是计算机自动完成重复工作的常见方式之一。
countrys = ['U.S.A', 'Germany','U.S','Japan','India']
for country in countrys:#这行代码让python获取列表countrys中的第一个值,并把值存储到变量country中,
print(country)#然后python读取代码,后续依次执行
在for循环中执行更多的操作
在for循环中,可以对每个元素执行任何操作。可以包含多少行代码都可以,for循环对于执行多个元素的列表很好用。
例:
countrys = ['U.S.A', 'Germany','U.S','Japan','India']
for country in countrys:
print(country.lower() + '是美丽的国家')
在for 循环之后要做的操作
for循环之后怎么做什么?通常我们进行总结性的输出或者接着执行程序晚期必须完成的任务。
for 循环后面,没有缩进的代码,只执行一遍,不会进行重复执行。
例:
heros = ["李白","安琪拉","钟馗",'亚瑟']
for i in heros:
print(i)
print('争取早日上王者吧')#可以看到,放在for循环之外的代码,执行了一遍
避免缩进错误
●对于for循环之后的语句属于for循环的部分代码,一定要缩进,如果你忘记了缩进会报错:
IndentationError: expected an indented block
●但是,也会出现没有缩进,但是程序没有报错的情况,但是这时的输出,可能不是你想要的结果。出现了逻辑错误。
●如果你把不必要缩进的代码,放在了for循环内,也会导致逻辑错误。
●for循环后,需要是用:号结尾,然后下一行编写要循环的代码。
创建数值列表
使用函数range()
python提供了range()函数,可以让我们轻松生成一系列的数字。
例:
for i in range(10):
print(i)
使用range()方法生成数字列表
要创建数字列表,可以使用list()方法。将range()的结果转换为列表。将range()作为list()的参数,输出为一个数字列表。
例:
num_list = list(range(10))
print(num_list)
使用range()函数时,可以指定步长。
例:
for i in range(0,10,2):#循环生成0-10,步长为2的数值
print(i)
range()方法几乎可以实现所有的数值列表。
例:创建一个1-10的平方的数值,python中**代表乘方运算
num_power = []
for i in range(1,11):
num = i**2
num_power.append(num)
print(num_power)
对于数字列表执行简单的统计计算
python提供了内置函数,可以轻松的计算出数字列表的最大值,最小值,总和。
例:
#求和
nums = [100,232,321,11,123]
print(sum(nums))
#求最大
print(max(nums))
#求最小
print(min(nums))
列表推导式(列表解析)
我们通过前面的例子,已经可以使用3、4行代码去生成我们想要的数值列表,这里作为提升,我们介绍一下列表推导式,它可以使用一行代码让我们完成需要的任务。
例:我们需要生成1-10的乘方数字
num_power = [i ** 2 for i in range(1,11) ]
print(num_power)
语法解析:
首先我们需要,使用一个列表名,然后指定一个左[,并定义一个表达式,用于我们需要存储到列表中的值,这个例子中,是i**2 求值得平方。然后编写一个for循环用于给表达式提供数值,最后加上右]作为结尾。
注意:●这里的for循环没有:结尾
●推到是需要多加练习,可以提升你的代码效率
练习:
#数到20:使用一个for 循环打印数字1-20(含)
for i in range(1,21):
print(i)
#创建一个列表,其中包含数字1-100000在使用一个for循环将这些数字打印出来
nums = list(range(1,100001))
print(nums)
#创建一个列表,包含数字1-100000.再用min max核实开头和结尾是1和100000 sum求出和
nums1 = list(range(1,100001))
print(min(nums1))
print(max(nums1))
print(sum(nums1))
#通过函数range()方法,计算1-20奇数 再使用for循环打印
for a in range(1,21,2):
print(a)
#创建一个列表,包含3-30内能被3整除的数字,使用for循环打印
nums_ji =[]
for n in range(3,31):
if n % 3 == 0:
nums_ji.append(n)
print(nums_ji)
#一个数字乘3次被称为立方,Python中使用**3表示,创建一个列表包含前1-10的立方,使用for循环打印
for i in range(1,11):
i = i**3
print(i)
#使用列表解析生成列表,包含1-10的立方
nums1_li = [i**3 for i in range(1,11) ]
print(nums1_li)
使用列表的一部分
在工作中,如果我们只需要使用列表的一部分内容,我们处理这部分的内容被称为列表的切片
切片
创建要切片的列表,可以使用第一个元素和最后一个元素的索引。与range()函数一样,例如要输出0-2的元素,值为0、1、2。
例:
heros = ['李白','孙尚香','后裔','白起']
print(heros[0:2])
●如果没有指定索引[:],python会从开头切到结尾
●如果想要最后3个元素,可以使用负值 [-3:0]
●切片之后的数据类型是list
遍历切片
可以使用for循环进行切片后进行元素遍历
例:
heros = ['李白','孙尚香','后裔','白起']
print(heros[:])
print(type(heros[:]))#可以看到切片后的类型是list
for hero in heros[-3:]:
print(hero)
复制列表
如果使用列表的过程中,我们需要创建全新的列表,可以使用切片,起第一个元素始最后一个元素。
例:
heros = ['李白','孙尚香','后裔','白起']
heros_new = heros[:]
print(heros_new)
heros.append('孙斌')#为了证明我们现在有两个列表,向原始列表添加新的元素
print(heros)
print(heros_new)#复制的列表没有新元素
顶顶顶