第三章 列表简介(一)

    列表是一个很重要的章节内容,其实在Python中,主要是列表,字典,然后就是函数,类,类都是有各种功能的函数组成,只要掌握了列表、字典的性质,以及方法,然后了解函数的调用原则,参数是如何调用的,打好了这些坚实的基础,后面对自己整个学习历程都大有裨益。

3.1 列表是什么

    列表:由一系列特定顺序排列的元素组成。我们可以创建包含字母表中的所有字母、数字0-9或所有家庭成员姓名的列表;也可以将任何东西加入列表中,其中的元素之间没有任何关系。鉴于列表通常包含多个元素,给列表制定一个复数的名称(如names,letters,usres等)是个不错的注意。

    在Python中,用方括号([])来表示列表,并用逗号来分隔其中的元素。

注意:列表是有顺序的,按照特定顺序排列的,这点一定要牢记,因为只有了解了列表有序的,才能够明白为什么要调用列表中的元素,以及调用的原则。而且这是列表独有的性质。

bicycles.py

bicycles = ["trek","cannodale","redline",'speciaized']
print(bicycles)

results:

['trek', 'cannodale', 'redline', 'speciaized']

3.1.1 访问列表元素

    列表是有序集合,按照特定顺序排列的元素组成,因此我们要访问列表中的元素,只需要告诉Python该元素的位置或索引。要访问列表元素,可指出列表的名称,再指出元素的索引,并将其放在方括号内。

3.1.2 索引从0而不是从1开始

    在Python中,第一个列表元素的索引为0,而不是1。在大多数编程语言中都是如此,这与列表操作的底层实现相关。如果结果出乎意料,请看看是否犯了简单的差一错误。

    第二个列表元素的索引为1,根据这种简单的计数方式,要访问列表的任何元素,都可以将其位置减1,并将结果作为索引。

    Python为访问最后一个列表元素提供了一种特殊语法。通过将索引指定为-1,可让Python返回最后一个列表元素,如bicycles[-1]返回列表最后一个元素“speciaized".

    这种语法很有用,因为我们经常需要在不知道列表长度的情况下访问最后的元素。这种约定也适用于其他负数索引,例如,索引-2返回倒数第二个列表元素,索引-3返回倒数第三个列表元素,以此类推。

3.1.3  使用列表中的各个值

    可像使用其他变量一样使用列表中能够的各个值。例如,你可以使用拼接根据列表中的值来创建消息。

    下面来尝试从列表中提取第一款自行车,并使用这个值来创建一条消息:

    bicycles = ["trek","cannodale","redline",'speciaized']
    message = "My first bicycle was a " + bicycles[0].title() + "."
    print(message)

    我们使用bicycles[0]的值生成了一个句子,并将其存储在变量message中。输出是一个简单的句子,其中包含列表中的第一款自行车。

    My first bicycle was a Trek.

动手试一试

    3-1 姓名: 将一些朋友的姓名存储在一个列表中,并将其命名为names。以此访问该列表中的每个元素,从而将每个朋友的姓名都打印出来。

    3-2 问候语: 继续使用练习3-1中的列表,但不打印每个朋友的姓名,而为每个人打印一条消息。每条消息都包含相同的问候语,但抬头为相应朋友的名字。

    3-3 自己的列表: 想想你喜欢的通勤方式,如骑摩托车或开汽车,并创建一个包含多种通勤方式的列表。根据该列表打印一系列有关通勤方式的宣言,如”I would like to own a Honda motorcycle"。

分析:

    3-1 本题的主要目的是遍历列表中的每一个元素,首先定义一个列表,然后以此对每个列表进行遍历

    names = ["tom","zengmignzhu","gengchangxue","dlj"]
   print(names[0])
   print(names[1])
   print(names[2])
   print(names[3])

    首先定义了一个列表,然后以此对列表中的每个元素进行遍历,输出结果如下:

tom
zengmignzhu
gengchangxue
dlj

    从中可以看出列表是有序的,而且一定要牢记,列表的表示方式,列表名加上索引号,在中括号[]里面添加索引号。

    3-2 本题是第一题的提升,也是输出名字,只是要使用拼接合并的功能,目的就是为了锻炼使用拼接合并功能。

 

    names = ["tom","zeng mign zhu","geng chang xue","dlj"]
print(names[0].title() + " is my great firend.")
print(names[1].title() + " is a excellent student.")
print(names[2].title() + " is my girl friend.")
print(names[3].title() + " is my good friend")
结果输出:
Tom is my great firend.
Zeng Mign Zhu is a excellent student.
Geng Chang Xue is my girl friend.
Dlj is my good friend

    3-3 本题也是考察列表的调用方式,字符串的拼接功能

    commuting_modes = ["by car","ride motorcycle","on foot",'by bus']

3.2 修改、添加和删除元素

    我们创建的列表大多数都是动态的,这意味着列表创建后,将随着程序的运行增删元素。例如,我们创建一个游戏,要求玩家射杀从天而降的外星人;为此,可在开始时将一些外星人存储在列表中,然后每当有外星人被射杀时,都将其从列表中删除,而每次有新的外星人出现在屏幕上时,都将其添加到列表中。在整个游戏运行期间,外星人列表的长度将不断变化。

3.2.1 修改列表元素

    修改列表元素的语法与访问列表元素的语法类似。要修改列表元素,可指定列表名和要修改的元素的索引,再指定该元素的新值:

 

motorcycles = ['honda','yamha','suzuki']
print(motorcycles)

motorcycles[0] = "ducati"
print(motorcycles)
我们首先定义一个摩托车列表,其中第一个元素为“Honda”。接下来,我们将第一个元素的值改为'ducati'。输出结果如下:显示确实改了
['honda', 'yamha', 'suzuki']
['ducati', 'yamha', 'suzuki']
我们可以修改列表中任意一个位置的元素,只要我们知道修改的位置以及目的。
3.2.2 在列表中添加元素
我们可能出于应用,在列表中添加新的元素。例如,希望游戏中出现新的外星人,添加可视化数据或给网站添加新注册的用户。Python提供了多种在既
有列表中添加新元素的方法。
1、在列表末尾添加元素
在列表中添加新元素时,最简单的方法是将元素附加到列表的末尾。给列表添加元素时,它将添加到列表末尾。方法append(),在列表末尾添加元素。
方法append():
append(...)
L.append(object) -- append object to end(在列表末尾添加元素)
motorcycles.py
motorcycles = ['honda','yamha','suzuki']
motorcycles.append()
print(motorcycles)
motorcycles.append("ducati")
print(motorcycles)
注意:因为也没有实践过append()添加一个空的参数是怎样的,当参数省略的时候程序报错,如下:
Traceback (most recent call last):
  File "/home/zhuzhu/title3/motorcycles.py", line 2, in <module>
    motorcycles.append()
TypeError: append() takes exactly one argument (0 given)
错误的原因是方法append()没有参数,append()方法要有一个参数,但是(0 given)没有给参数,故而系统报错。
当给append()添加参数时如下:
motorcycles = ['honda','yamha','suzuki']
#motorcycles.append()
print(motorcycles)
motorcycles.append("ducati")
print(motorcycles)
results:
['honda', 'yamha', 'suzuki']
['honda', 'yamha', 'suzuki', 'ducati']
这次,我们将"ducati"添加到了列表的末尾,没有出现错误。
motorcycles = ['honda','yamha','suzuki']
motorcycles.append(" ")
motorcycles.append("")
print(motorcycles)
motorcycles.append("ducati")
print(motorcycles)


results:
['honda', 'yamha', 'suzuki', ' ', '']
['honda', 'yamha', 'suzuki', ' ', '', 'ducati']
当我们向程序添加空文本和空格的时候,程序都可以正常运行,而且结果里面也包含了''和" ",说明只要append()方法有参数,系统就不会报错,没有参数
程序就会出错。
方法append()让动态创建列表易如反掌,例如,我们可以先创建一个空列表,再使用一系列的append()语句添加元素。下面来创建一个空列表,再在其中添加
元素”honda","yamha"和"suzuki":
motorcycles = []
motorcycles.append("honda")
motorcycles.append("yamha")
motorcycles.append("suzuki")
print(motorcycles)
运行结果如下:
['honda', 'yamha', 'suzuki']
motorcycles = ["honda","yamha","suzuki"]
motorcycles.insert(0,"ducati")
print(motorcycles)
#现在有四个元素,我们看一下下表越界会有什么样的结果
motorcycles.insert(7,"sb")
motorcycles.insert(-7,"bs")
print(motorcycles)


运行结果:
['ducati', 'honda', 'yamha', 'suzuki']
['bs', 'ducati', 'honda', 'yamha', 'suzuki', 'sb']
从运行结果看,我们可以在我们制定的位置添加新的元素,只要制定新元素的索引和值就可以,我们也验证了上标和下标超界的情况,可以看出,无论是上标越界
还是下标越界,程序都没有报错,而是正常运行的,下标超界就在最后一个位置添加元素,上标超界就在最前面添加元素

总结:向列表中插入元素的方法有两种,第一是在末尾添加元素,append()方法,这种方法append()的参数一定要有,不能没有参数,可以添加任
何元素,''和" "等都可以,但是参数不能省略,而且不用指定位置,在生成新的列表的时候很有用;insert()方法是在列表任意位置添加元素,insert()
方法有两个参数,而且都不可以空缺,在插入的时候必须同时给两个参数指定值,有兴趣可以尝试一下,而且上下标可以越界,如果想每次在列表开头
添加元素的话,只需要执行L.insert(0,object),这样就能够每次在列表的开头添加元素,是对append()方法的一种补充。更为重要的是,当列表是空
列表的时候,使用insert()方法也不会报错,这点真的是挺强大的,在使用的时候我们不必要过分担心上下标越界的情况,也不用担心在使用过程中,如果
列表是空,会不会出错的问题。
向列表中添加新的元素,这两个方法都可以很好的使用,具体情况具体使用,都很好这两个方法。
motorcycles = []
#motorcycles.insert(0,"ducati")
print(motorcycles)
#现在有四个元素,我们看一下下表越界会有什么样的结果
motorcycles.insert(7,"sb")
motorcycles.insert(-7,"")
print(motorcycles)
运行结果:
[]
['',
'sb']
从中可以看出,insert()方法还是很强大的,空,越界都没有出现程序报错问题。可以放心大胆使用。

3.2.3 从列表中删除元素
我们不仅经常向列表中添加元素,而且还经常从列表中删除元素,从列表中删除一个或多个元素。例如,游戏玩家将空中的一个外星人射杀后,我们就
很可能将其从存活的外星人列表中删除;当用户在你创建的Web应用中注销其账户时,我们也需要将该用户从活跃列表中删除。我们可以根据位置或值来删除
列表中的元素。(位置和值)我们知道删除元素的位置或者要删除那个元素。
1
.使用del语句删除元素
如果我们知道删除元素在列表中的位置,可使用del语句。
motorcycles = ["honda","yamha","suzuki"]
print(motorcycles)
#删除列表中第0个位置的值
del motorcycles[0]
print(motorcycles)


运行结果:
['honda', 'yamha', 'suzuki']
['yamha', 'suzuki']
我们知道我们要删除的是第0个位置的元素,因而我们使用del删除了列表中第0个位置的值,del的使用方法是del + L.[i]
使用del可删除任何位置的列表元素,前提是我们知道它在列表中的位置,既其索引。下面来看如何删除前述列表中第二个元素——"yamaha":
motorcycles = ["honda","yamha","suzuki"]
print(motorcycles)
#删除列表中第0个位置的值
del motorcycles[1]
print(motorcycles)
运行结果:
['honda', 'yamha', 'suzuki']
['honda', 'suzuki']
从中我们看出,使用del删除列表元素方法是要我们知道元素在列表中的具体位置,既索引。del + L[i]
使用del方法将元素从列表中删除之后,列表中就不存在这个值了,我们就无法在访问它了。
下面我们来尝试一下上下标越界的情况:
motorcycles = ["honda","yamha","suzuki"]
print(motorcycles)
#删除列表中第0个位置的值
del motorcycles[-5]
del motorcycles[5]
print(motorcycles)
运行结果:
['honda', 'yamha', 'suzuki']
Traceback (most recent call last):
  File "/home/zhuzhu/title3/motorcycles.py", line 4, in <module>
    del motorcycles[-5]
IndexError: list assignment index out of range
从结果中我们可以看出是索引出现了问题(IndexError),索引错误的原因是索引超界。因而在使用del删除的时候,一定是知道了元素的具体位置,然后
进行删除,如果列表是空的肯定也会报错,不像insert()方法那样。因为del是删除列表中的元素,索引值超过的时候这个元素在列表中根本就不存在
因此不能够进行删除,系统会报错。

2 使用方法pop()删除元素
pop(...)
 |      L.pop([index]) -> item -- remove and return item at index (default last).
 |      Raises IndexError if list is empty or index is out of range.

从pop()方法的说明看,pop()方法移除和返回元素,从一个列表中移除,然后返回给另外一个变量,而且如果列表是空的,或者索引超界,都会出现错误。
有时候,我们要将元素从列表中删除,并接着使用它。例如,我们可能要获取刚被射杀的外星人的x和y坐标,以便在相应的位置显示爆炸的效果;在Web应用中,
我们可能将用户从活跃成员列表中删除,并将其加入到非活跃成员列表中。
方法pop()可以删除列表末尾的元素,并让我们能够接着使用它。术语弹出(pop)源自这样的类别比:列表就像一个栈,而删除列表末尾的元素相当于弹出栈顶元素。
下面从列表motorcycles中弹出一款摩托车:
motorcycles = ["honda","yamha","suzuki"]
print(motorcycles)
#从列表中弹出一个新的元素并将它赋值给poped_motorcycle,接着使用它
poped_motorcycle = motorcycles.pop()
print(motorcycles)
print(poped_motorcycle)
运行结果:
['honda', 'yamha', 'suzuki']
['honda',
'yamha']
suzuki

3.弹出列表中任何位置的元素
pop(...)
 |      L.pop([index]) -> item -- remove and return item at index (default last).
 |      Raises IndexError if list is empty or index is out of range.

由L.pop([index])可以看出,在pop中是可以指定参数的,我们能够删除任意位置的值,只需要在括号中制定要删除的元素的索引即可。
motorcycles = ["honda","yamha","suzuki"]

first_owned = motorcycles.pop(0)
second_owned = motorcycles.pop(1)
print("The first motorcycle I owned was a " + first_owned.title() + ".")
print(second_owned)
运行结果:
The first motorcycle I owned was a Honda.
suzuki
从运行结果可以看书,我们能够指定要弹出那个位置的元素,而且我们也可以惊讶的发现,当我们弹出pop(1)的时候输出的结果不是我们想象的"yamha",
那是因为当我们把其中一个弹出来的时候,剩下的列表的元素发生了改变,后面的会自动补缺被弹出的元素的位置,这个时候,元素的长度是减一的,所以
我们要弹出pop(1)的时候,其实弹出的是列表["yamha","suzuki"]中的pop(1),这个时候就弹出了"suzuki"。这个问题在使用remove的时候也会遇到,
一定要在这一块注意,当我们从列表中删除元素的时候,列表的长度是发生变化的,被删除元素的位置会被后面紧挨着的元素替代。
所以,要牢记,当我们使用pop()方法时,被弹出的元素就不再列表中了。
如果不确定该使用del语句还是pop()方法,下面是一个简单的判断标准:如果你要从列表中删除一个元素,且不再以任何方式使用它,就使用del语句,
如果你要在删除元素后还能继续使用它,就使用方法pop()

4.根据值删除元素

numbers = [2,5,2,2,5,0,99,2,2,2]
for number in numbers:
if number == 2:
numbers.remove(number)
print(numbers)
运行结果:
[5, 2, 2, 5, 0, 99, 2, 2, 2]
[5, 2, 5, 0, 99, 2, 2, 2]
[5, 5, 0, 99, 2, 2, 2]
[5, 5, 0, 99, 2, 2]
可能很多人会迷惑,为什么还有2没有删除,为什么5和5之间没有2,这些是什么情况,下面来看裕兴情况:
[2,5, 2, 2, 5, 0, 99, 2, 2, 2]  ---numbers[0]
[5, 2, 2, 5, 0, 99, 2, 2, 2]     ---numbers[1]
[5, 2, 5, 0, 99, 2, 2, 2]         ---numbers[2]
[5, 2, 5, 0, 99, 2, 2, 2]       ---numbers[3]
[5, 2, 5, 0, 99, 2, 2, 2]       ---numbers[4]
[5, 2, 5, 0, 99, 2, 2, 2]       ---numbers[5]
[5, 5, 0, 99, 2, 2, 2]          ---numbers[6]
[5, 5, 0, 99, 2, 2]             ---numbers[7]
首先我们要明确,for循环内置计数器,首先我们从numbers列表中循环第一个元素,等于2,然后移除,然后从列表中循环numbers[1],此时numbers列表
第二个元素是2,删除,然后运行numbers[2],由于在[5, 2, 5, 0, 99, 2, 2, 2]中numbers[2]是5,所以程序继续执行,但是没有删除元素,循环值numbers[3]
,numbers[3]是0,不满足,继续循环,numbers[4]是99,不满自继续执行,当到numbers[5]的时候,值为2,此时要删除列表中的2,可能很多人这里不明白,刚开始
我也是这样,我们还记得remove()方法的属性吗?删除第一个遇到的值,此时5和5之间的2遭殃了,由于在最前面,所以删除的是这个2,而不是列表[5, 2, 5, 0, 99, 2, 2, 2]
中numbers[5]位置的2,这点我们一定要基础。
总结:删除列表中元素的方法有del语句,pop()方法和remove()方法,如何使用这三种方法呢?首先,del语句是删除列表中指定的值,我们知道这个值的位置索引,然后删除这个
值,del + L[],是我们知道了这个元素在列表中的具体位置,位置索引,然后进行的删除,而pop()方法如果没有制定参数的话默认是弹出最后一个参数,而且弹出的值可以再次使用,
pop(0)可以每次弹出第一个元素的值,del + L[0]效果等同,而remove()方法适用于我们知道这个元素具体的值,知道要把某个具体的元素从列表中删除,删除的是具体的元素值,而
不是索引的方式。remove(object),但是无论那种方法,我们一定要牢记,但把原列表中值删除的时候,原来列表的值必定发生了变化,长度也发生了变化,索引值发生了改变,删除
元素的位置会被后面的元素补缺上。这点一定要记住,在使用删除的时候一定要选择正确的删除方式,避免发生不必要的错误。

动手试一试
3-4 嘉宾名单:
如果你可以邀请任何人一起共进晚餐(无论是在世的还是故去的),你会邀请纳西人?请创建一个列表,其中包含至少3个你想邀请的人;然后,请使用这个列表打印消息,邀请这些人
共进晚餐;

3-5 修改嘉宾名单:
你刚得知有位嘉宾无法赴约,因此需要另外邀请以为嘉宾
1、以完成练习3-4时编写的程序为基础,在程序的末尾添加一条print语句,指出哪位嘉宾无法赴约。
2、修改嘉宾名单,将无法赴约的嘉宾的姓名替换为新邀请的嘉宾的姓名;
3、再次打印一条消息,向名单中的每位嘉宾发出邀请。

3-6 添加嘉宾:
你刚找到了一个更大的餐桌,可容纳更多的嘉宾。请想想你还想邀请哪三位嘉宾。
1、以完成联系3-4或练习3-5为基础,在程序的末尾添加一条print语句,指出你找到了一个更大的餐桌。
2、使用insert()将一位新嘉宾添加到名单开头;
3、使用insert()将另一位新嘉宾添加到名单中间;
4、使用append()将最后一位新嘉宾添加到名单末尾;
5、打印一系列消息,向名单中的每位嘉宾发出邀请。
invitation_friends = ["Sora Aoi","Maria Ozawa","Ria Sakurai","Yoshizawa Akiho"]
#首先定义了一个要邀请的列表,然后遍历每个名字
print("I'd like to invite " + invitation_friends[0] + " to dinner.")
print("I'd like to invite " + invitation_friends[1] + " to dinner.")
print("I'd like to invite " + invitation_friends[-2] + " to dinner.")
print("I'd like to invite " + invitation_friends[-1] + " to dinner.")


运行结果:
I'd like to invite Sora Aoi to dinner.
I'd like to invite Maria Ozawa to dinner.
I'd like to invite Ria Sakurai to dinner.
I'd like to invite Yoshizawa Akiho to dinner.
要记住列表的集中表示方法,L[0],L[1],L[-1],L[-2]
3-5 本题主要考察列表元素的修改方法,以及再次锻炼大家列表表示方法的使用
invitation_friends = ["Sora Aoi","Maria Ozawa","Ria Sakurai","Yoshizawa Akiho"]
print("Because Yoshizawa Akiho has something spical,don't come to dinner.")
#修改列表中的元素,列表中第四个元素的值,主要是列表中元素的重新赋值
invitation_friends[3] = "Yoshiko Kawashima"
print(invitation_friends)
for invitation_friend in invitation_friends:
print("I'd like to invite " + invitation_friend + "to have dinner.")


运行结果:
Because Yoshizawa Akiho has something spical,don't come to dinner.
['Sora Aoi', 'Maria Ozawa', 'Ria Sakurai', 'Yoshiko Kawashima']
I'd like to invite Sora Aoito have dinner.
I'd like to invite Maria Ozawato have dinner.
I'd like to invite Ria Sakuraito have dinner.
I'd like to invite Yoshiko Kawashimato have dinner.
3-6 本题主要是练习使用insert()方法,添加元素的方法,append(),insert()
invitation_friends = ["Sora Aoi","Maria Ozawa","Ria Sakurai","Yoshizawa Akiho"]
print("I find a bigger dinner ,so I can invite more friends to have dinner together.")
#使用方法insert()一定要告诉Python插入到列表哪里去
invitation_friends.insert(0,"Obama")
invitation_friends.insert(2,"Namitano Yoshii")
invitation_friends.append("Sea Wing")
for friend in invitation_friends:
print("I'd like to invite " + friend + " to have dinner.")
运行结果:
I find a bigger dinner ,so I can invite more friends to have dinner together.
I'd like to invite Obama to have dinner.
I'd like to invite Sora Aoi to have dinner.
I'd like to invite Namitano Yoshii to have dinner.
I'd like to invite Maria Ozawa to have dinner.
I'd like to invite Ria Sakurai to have dinner.
I'd like to invite Yoshizawa Akiho to have dinner.
I'd like to invite Sea Wing to have dinner.

3-7 本题主要目的是练习删除列表元素的方法
invitation_friends = ["Sora Aoi","Maria Ozawa","Ria Sakurai","Yoshizawa Akiho"]
#print("I find a bigger dinner ,so I can invite more friends to have dinner together.")
#使用方法insert()一定要告诉Python插入到列表哪里去
invitation_friends.insert(0,"Obama")
invitation_friends.insert(2,"Namitano Yoshii")
invitation_friends.append("Sea Wing")
print("I am sorry to that I can not buy the table in a timely manner, so I can only invite two friends.")
for i in range(len(invitation_friends)):
not_in = invitation_friends.pop()
num = len(invitation_friends)
if num == 2:
break
else:
print("I am sorry, " + not_in)
print(invitation_friends)

del invitation_friends[0]
print(invitation_friends)
del invitation_friends[0]
print(invitation_friends)
 







 
 
 




 
 

 










 









 



 

 

 

   

原文地址:https://www.cnblogs.com/gengcx/p/6602699.html