📁在本章中,你将学习列表是什么以及如何使用列表元素。列表能让你在一个地方存储成组的信息,其中可以只包含几个元素,也可以包含数百万个元素。列表是新手可直接使用的最强大的Python功能之一。
2.1列表是什么?
列表由一系列按特定顺序排列的元素组成。可以创建包含字母、数字或所有家庭成员姓名的列表;也可以将任何东西放到列表中。其中的元素之间可以没有任何关系。
在Python中,用方括号 [ ] 来表示列表,并用逗号分隔里面的元素。下面的列表包含几种自行车:
bicycles.py
bicycles = [ 'trek', 'cannondale', 'redline', 'specialized']
print(bicycles)
如果你让Python将列表打印出来,print将会做以下输出:
['trek', 'cannondale', 'redline', 'specialized']
鉴于以上输出并不是想要的,下面将学习如何访问列表元素。
2.1.1访问列表元素
列表是有序集合,因此要访问列表的任何元素,只需将该元素的位置或索引告诉python即可。
要访问列表的元素,可列出列表的名称,再指出列表的索引,并将其放在括号内。例如,下面的代码 从列表bicycles中提取第一款自行车:
bicycles = [ 'trek', 'cannondale', 'redline', 'specialized']
print(bicycles[0])
输出:
trek
上面程序演示了访问列表元素的语法,当你请求获取列表元素时,Python只返回该元素,而不包括方括号和引号。
还可以用处理字符串的方法,例如,使用方法 title() 让元素 'trek' 的格式更简洁:
bicycles = [ 'trek', 'cannondale', 'redline', 'specialized']
print(bicycles[0]。title())
输出:
Trek
这个示例的输出和上一个示例相同,只是首字母T是大写的。
2.1.2索引从0开始,而不是1
在Python中,第一个列表元素的索引是0而不是1,这和大多数编程语言类似。
要访问列表的任何元素,都可以将其位置减1,并将结果作为索引。例如要访问第三个元素,可使用索引3。
下面的代码访问索引1和3处的自行车:
bicycles = [ 'trek', 'cannondale', 'redline', 'specialized']
print(bicycles[1])
print(bicycles[3])
输出:
cannondale
specialized
索引列表的第一个和第三个元素,输出的是列表的第二和第四个元素。
Python为访问最后一个列表元素提供了一种特殊语法。通过将索引值指定为-1,可以让Python返回最后一个列表元素:
bicycles = [ 'trek', 'cannondale', 'redline', 'specialized']
print(bicycles[-1])
输出:
specialized
这种索引方式可以在不知道列表元素个数的情况下访问最后的元素。这种约定也适用于其他复数索引,例如,索引-2返回倒数第二个元素,索引-3返回倒数第三个元素,以此类推。
2.1.3使用列表中的各个值
可像使用其他变量一样使用列表中的各个值。例如,你可以使用拼接根据列表中的值来创建消息。
下面尝试从列表中提取第一款自行车,并使用这个值来创建消息:
bicycles = [ 'trek', 'cannondale', 'redline', 'specialized']
message = "My first biycle was a " + bicycles[0].title() + "."
print(message)
输出:
My first biycle was a Trek.
2.1.4小试牛刀👿
姓名:将一些朋友的姓名存储在列表中,并就将其命名为names。依次访问该列表的每一个元素,从而将每个朋友的姓名都打印出来。
问候语:继续使用上面的列表,但不打印每个朋友的姓名,而为每个人打印一条消息。每条消息都打印相同的问候语,但抬头为相应朋友的姓名。
自己的列表:想想你喜欢的通勤方式,如骑摩托或开汽车,并创建一个包含多种通勤方式的列表。根据该列表打印一系列有关这些通信方式的宣言 ,如“ I would like to own a Honda motorcycle”
2.2修改、添加和删除元素
你创建的大多数列表将是动态的,这意味着列表创建后,将随着程序的运行增删元素。
2.2.1修改列表元素
修改列表元素的语法与访问列表元素的语法相似。要修改列表元素,可指定列表名和要修改的元素的索引,再指定该元素的新值。例如,假如有一个摩托车列表,其中第一个元素为 'honda' ,如何修改它的值呢?
motorcycles.py
motorcycles = [ 'honda', 'yamaha', 'suziki' ]
print(motorcycles)
motorcycles[0] = 'ducati'
print(motorcycles)
输出:
['honda', 'yamaha', 'suziki']
['ducati', 'yamaha', 'suziki']
可以修改任何列表元素的值,而不仅仅是第一个元素的值。
2.2.2在列表中添加元素
在列表末尾添加元素
你可能由于众多原因需要在列表中添加新的元素时,最简单的方式是将元素附加到列表的末尾。给列表附加元素时,它将添加到列表末尾。继续使用前一个示例的列表,在其末尾添加新的元素'ducati'
motorcycles = [ 'honda', 'yamaha', 'suziki' ]
print(motorcycles)
motorcycles.append('ducati')
print(motorcycles)
输出:
['honda', 'yamaha', 'suziki']
['honda', 'yamaha', 'suziki', 'ducati']
方法append()让动态地创建列表。例如,你可以先创建一个空列表,再使用一系列的append()语句添加元素。下面创建一个空列表,再在其中添加元素'honda', 'yamaha', 'suziki':
motorcycles = [ ]
motorcycles.append('honda')
motorcycles.append('yamaha')
motorcycles.append('suziki')
print(motorcycles)
输出:
['honda', 'yamaha', 'suziki']
最终的列表与前述示例中的列表完全相同。
在列表中插入元素
使用方法insert()可在列表的任何位置添加新元素。为此,你需要指定新元素的索引和值。
motorcycles = [ 'honda', 'yamaha', 'suziki' ]
print(motorcycles)
motorcycles.insert( 0 ,'ducati')
print(motorcycles)
输出:
['honda', 'yamaha', 'suziki']
['ducati', 'honda', 'yamaha', 'suziki']
在这个实例中,值 'ducati' 被插入到列表开头,方法insert() 在索引0处添加空间,并将值 'ducati' 存储到这个地方。这种操作将列表中既有的每个元素都右移一个位置。
2.3从列表中删除元素
如果需要从列表中删除一个或多个元素,可以根据位置或值来删除这些元素。
2.3.1使用del语句删除元素
motorcycles = [ 'honda', 'yamaha', 'suziki' ]
print(motorcycles)
del motorcycles[0]
print(motorcycles)
输出:
['honda', 'yamaha', 'suziki']
['yamaha', 'suziki']
使用del可删除任何位置处的列表元素,条件是知道其索引。下面演示删除其第二个元素——'yamaha'.
输出:
['honda', 'yamaha', 'suziki']
['honda', 'suziki']
在以上两个示例中,使用del语句将值从列表中删除后,你将无法再进行访问。
2.3.2使用pop()删除元素
有时候,你要将元素从列表中删除,并接着使用它的值。例如游戏中,你可能需要获取刚被杀外星人的x和y坐标。
方法pop() 可删除列表末尾的元素,并让你能够接着使用它。术语弹出(pop)源自这样的类比: 列表就像一个栈,而删除列表末尾的元素就相当于弹出栈顶元素。
下面从列表motorcycle中弹出一款摩托车:
motorcycles = [ 'honda', 'yamaha', 'suziki' ]
print(motorcycles)
poped_motorcycles = motorcycles.pop()
print(motorcycles)
print(poped_motorcycles)
输出:
['honda', 'yamaha', 'suziki']
['honda', 'yamaha']
suziki
输出表明:列表末尾的值 'suziki' 已删除,存在在变量poped_motorcycles中。
有时候,需要删除并弹出列表中中间位置的元素,只需在 pop() 括号中指定要删除的元素的索引即可。
motorcycles = [ 'honda', 'yamaha', 'suziki' ]
first_owned = motorcycles.pop(0)
print('This first motorcyclesv I owned was a ' + first_owned.title() + '.')
输出:
This first motorcyclesv I owned was a Honda.
别忘了,使用pop()时,被弹出的元素就不再在列表中了。
何时使用del语句,何时使用pop()方法,下面是一个简单的判断标准:
如果你要从列表中删除一个元素,且不再以任何方式使用它,就使用del语句;如果要在删除之后还要继续使用,就用方法pop()。
2.3.3根据值删除元素
有时候,你不知道要从列表中删除值的位置,如果你只知道要删除元素的值,可使用方法remove()。
例如,假设我们要从列表motorcycle中删除值 ' ducati '。
motorcycles = [ 'honda', 'yamaha', 'suziki', 'ducati' ]
print(motorcycles)
motorcycles.remove('ducati')
print(motorcycles)
输出:
['honda', 'yamaha', 'suziki', 'ducati']
['honda', 'yamaha', 'suziki']
使用remove()从列表中删除元素时,也可接着使用它的值。下面删除值 'ducati' ,并打印一条消息,指出要将其从列表中删除的原因:
motorcycles = [ 'honda', 'yamaha', 'suziki', 'ducati' ]
print(motorcycles)
too_expensive = 'ducati'
motorcycles.remove(too_expensive)
print(motorcycles)
print("A " + too_expensive.title() + "is too expensive for me." )
输出:
['honda', 'yamaha', 'suziki', 'ducati']
['honda', 'yamaha', 'suziki']
A Ducatiis too expensive for me.
方法remove()只删除第一个指定的值。如果要删除的值可能在列表中出现多次,就需要使用循环(后面章节会学习)来判断是否删除了所有这样的值。
2.3.4小试牛刀👿
🚩嘉宾名单 :如果你可以邀请任何人一起共进晚餐(无论是在世的还是故去的),你会邀请哪些人?请创建一个列表,其中包含至少 个你想邀请的人;然后,使用 这个列表打印消息,邀请这些人来与你共进晚餐。
🚩修改嘉宾名单 :你刚得知有位嘉宾无法赴约,因此需要另外邀请一位嘉宾。
- 以完成练习3-4时编写的程序为基础,在程序末尾添加一条print 语句,指出哪位嘉宾无法赴约。
- 修改嘉宾名单,将无法赴约的嘉宾的姓名替换为新邀请的嘉宾的姓名。
- 再次打印一系列消息,向名单中的每位嘉宾发出邀请。
🚩添加嘉宾 :你刚找到了一个更大的餐桌,可容纳更多的嘉宾。请想想你还想邀请哪三位嘉宾。
- 以完成练习3-4或练习3-5时编写的程序为基础,在程序末尾添加一条print 语句,指出你找到了一个更大的餐桌。
- 使用insert() 将一位新嘉宾添加到名单开头。 使用insert() 将另一位新嘉宾添加到名单中间。
- 使用append() 将最后一位新嘉宾添加到名单末尾。
- 打印一系列消息,向名单中的每位嘉宾发出邀请。
🚩 缩减名单 :你刚得知新购买的餐桌无法及时送达,因此只能邀请两位嘉宾。
- 以完成练习3-6时编写的程序为基础,在程序末尾添加一行代码,打印一条你只能邀请两位嘉宾共进晚餐的消息。
- 使用pop() 不断地删除名单中的嘉宾,直到只有两位嘉宾为止。每次从名单中弹出一位嘉宾时,都打印一条消息,让该嘉宾知悉你很抱歉,无法邀请他来共进 晚餐。
- 对于余下的两位嘉宾中的每一位,都打印一条消息,指出他依然在受邀人之列。
- 使用del 将最后两位嘉宾从名单中删除,让名单变成空的。打印该名单,核实程序结束时名单确实是空的。
2.3组织列表
在你创建的列表中,元素的排列顺序往往是无法预测的,因为你并非总能控制用户提供数据的顺序。有时候希望保留列表元素最初的排列顺序,而有时候又需要调整排列顺序,Python提供了很多组织列表的方式,根据具体情况选用。
2.3.1使用sort()对列表进行永久性排序
方法sort()可以永久性的修改列表元素的排列顺序。下面的代码是按首字母的顺序进行排序:
car = [ 'bmw', 'audi', 'toyota', 'subaru' ]
car.sort()
print(car)
输出:
['audi', 'bmw', 'subaru', 'toyota']
还可以按字母相反的顺序排列列表元素,只需向方法 sort() 传递参数reverse = True。下面示例将按字母相反的次序进行输出:
car = [ 'bmw', 'audi', 'toyota', 'subaru' ]
car.sort(reverse = True)
print(car)
输出:
['toyota', 'subaru', 'bmw', 'audi']
同样,对列表元素顺序的修改时永久性的。
2.3.2使用sorted() 对列表进行临时排序
要保留列表元素原来的顺序,又要以特定的顺序展现它们,可使用函数sorted()。
函数sorted()能够让你按照特定顺序显示表列元素,同时又不影响他们在列表中的原始排列顺序。下面调用sorted():
cars = [ 'bmw', 'audi', 'toyota', 'subaru' ]
print("Here is the original list: ")
print(cars)
print("\nHere is the sorted list: ")
print(sorted(cars))
print("\nHere is the original list again: ")
print(cars)
输出:
Here is the original list:
['bmw', 'audi', 'toyota', 'subaru']
Here is the sorted list:
['audi', 'bmw', 'subaru', 'toyota']
Here is the original list again:
['bmw', 'audi', 'toyota', 'subaru']
调用函数sorted() 后,列表元素的排列顺序并没有改变,如果你要按照字母相反的顺序显示列表,也可以向函数sorted()传递参数reverse = True。
2.3.3倒着打印列表
要反转列表元素的排列顺序,可使用方法reserse()。假设汽车列表是按购买时间排列的,可轻松的按照相反的顺序排列其中的汽车:
cars = [ 'bmw', 'audi', 'toyota', 'subaru' ]
print(cars)
cars.reverse()
print(cars)
输出:
['bmw', 'audi', 'toyota', 'subaru']
['subaru', 'toyota', 'audi', 'bmw']
reverse() 不是按与字母顺序相反的顺序排列列表的元素,而只是反转列表元素的排列顺序。
2.3.4确定列表长度
使用len() 可快速获悉列表的长度,下面的示例中,列表包含四个元素,因此其长度为:4
cars = [ 'bmw', 'audi', 'toyota', 'subaru' ]
print(len(cars))
输出:
4
2.3.5小试牛刀👿
🚩放眼世界 :想出至少5个你渴望去旅游的地方。
- 将这些地方存储在一个列表中,并确保其中的元素不是按字母顺序排列的。
- 按原始排列顺序打印该列表。不要考虑输出是否整洁的问题,只管打印原始Python列表。
- 使用sorted() 按字母顺序打印这个列表,同时不要修改它。
- 再次打印该列表,核实排列顺序未变。
- 使用sorted() 按与字母顺序相反的顺序打印这个列表,同时不要修改它。
- 再次打印该列表,核实排列顺序未变。
- 使用reverse() 修改列表元素的排列顺序。打印该列表,核实排列顺序确实变了。
- 使用reverse() 再次修改列表元素的排列顺序。打印该列表,核实已恢复到原来的排列顺序。
- 使用sort() 修改该列表,使其元素按字母顺序排列。打印该列表,核实排列顺序确实变了。
- 使用sort() 修改该列表,使其元素按与字母顺序相反的顺序排列。打印该列表,核实排列顺序确实变了。
🚩 晚餐嘉宾 :在完成练习3-4~练习3-7时编写的程序之一中,使用len() 打印一条消息,指出你邀请了多少位嘉宾来与你共进晚餐。
🚩尝试使用各个函数 :想想可存储到列表中的东西,如山岳、河流、国家、城市、语言或你喜欢的任何东西。编写一个程序,在其中创建一个包含这些元素的列 表,然后,对于本章介绍的每个函数,都至少使用一次来处理这个列表。
2.4遍历整个列表
你经常需要遍历列表的所有元素,对每个元素进行相同的操作。通过使用for循环,可用Python遍历。
下面使用for循环来打印魔术师名单中所有的名字:
magicians = [ 'alice', 'david', 'carolina'] //1
for magician in magicians: //2
print(magician)
输出:
alice
david
carolina
上面的代码中,定义了一个for循环,这行代码让Python从列表magicains中取出一个名字,并将其存储在变量magician中。最后让Python打印前面存储到变量magician中的名字。这样,对于列表中的每个名字,Python都将重复执行2处和3处的代码行。
2.4.1深入的研究循环
循环是让计算机自动完成重复工作的常见方式之一。刚开始使用循环时请牢记,对列表中的每个元素,都将执行循环指定的步骤,而不管列表包含多少个元素。
另外,编写 for 循环时,对于用于列表中每个值的临时变量,可指定任何名称。像下面这样编写for循环的第一行代码:
for cat in cats:
for dog in dogs:
这样的命名约定有助于你明白for循环中对每个元素执行的操作。使用单数和复数式的名称,可帮助你判断代码段处理的是单个列表元素还是整个列表。
2.4.2在for循环中执行更多的操作
下面来扩展前面的示例,
magicians = [ 'alice', 'david', 'carolina']
for magician in magicians:
print(magician.title() + ", that was a great trick!")
输出:
Alice, that was a great trick!
David, that was a great trick!
Carolina, that was a great trick!
上面的输出,对列表的每个魔术师,都打印了一条个性化消息。
在for循环中,想包含多少代码都可以,在语句for... in...的后面,每个所进的代码,都是循环的一部分,针对列表中的每个值都执行一次。
2.4.3小试牛刀👿
🚩比萨 :想出至少三种你喜欢的比萨,将其名称存储在一个列表中,再使用for 循环将每种比萨的名称都打印出来。
- 修改这个for 循环,使其打印包含比萨名称的句子,而不仅仅是比萨的名称。对于每种比萨,都显示一行输出,如“I like pepperoni pizza”。
- 在程序末尾添加一行代码,它不在for 循环中,指出你有多喜欢比萨。输出应包含针对每个比萨的消息,还有一个总结性句子,如“I really love pizza!”。
🚩 动物 :想出至少三种有共同特征的动物,将这些动物的名称存储在一个列表中,再使用for 循环将每种动物的名称都打印出来。
- 修改这个程序,使其针对每种动物都打印一个句子,如“A dog would make a great pet”。
- 在程序末尾添加一行代码,指出这些动物的共同之处,如打印诸如“Any of these animals would make a great pet!”这样的句子。
2.5创建数值列表
需要存储一组数字的原因有很多。在数据可视化中,处理的几乎都是由数字(如温度、距 离、人口数量、经度和纬度等)组成的集合。 列表非常适合用于存储数字集合,而Python提供了很多工具,可帮助你高效地处理数字列表。明白如何有效地使用这些工具后,即便列表包含数百万个元素,你编写的代码也能运行得很好。
2.5.1使用函数range()
Python函数range()可以轻松的生成一系列数字。例如:
for vail in range(1,5):
print(vail)
输出:
1
2
3
4
在上面的例子中,range()函数只打印数字1-4。函数range()从指定的第一个值开始数,并在达到你指定的第二个值后停止,因此输出不包含第二个值。使用range()时,如果输出不符合预期,尝试将指定值加一或减一。
2.5.2使用range()创建数字列表
可利用range()创建数字列表,例如:
numbers = list(range(1,6))
print(numbers)
输出:
[1, 2, 3, 4, 5]
使用range()时还可以指定步长。例如,下面的代码打印1-10内的偶数:
even_numbers = list(range(2,11,2))
print(even_numbers)
输出:
[2, 4, 6, 8, 10]
使用函数range()几乎能够创建任何需要的数字集。例如,创建一个列表,其中包含前十个整数的平方呢?在Python中,两个星号(**)表示乘方运算。
squares = []
for vail in range(1,11):
square = vail ** 2
squares.append(square)
print(squares)
[1]
[1, 4]
[1, 4, 9]
[1, 4, 9, 16]
[1, 4, 9, 16, 25]
[1, 4, 9, 16, 25, 36]
[1, 4, 9, 16, 25, 36, 49]
[1, 4, 9, 16, 25, 36, 49, 64]
[1, 4, 9, 16, 25, 36, 49, 64, 81]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
2.5.3对数字列表执行简单的统计计算
digitals = [1,2,3,4,5,6,7,8,9,0]
print(min(digitals))
print(max(digitals))
print(sum(digitals))
输出:
0
9
45
2.5.4列表解析
下面的示例使用解析列表创建平方数的列表:
squares = [ value ** 2 for value in range (1,11) ]
print(squares)
输出:
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
要使用这种语法,首先指定一个描述性的列表名,如squares;然后指定一个左方括号,并定义一个表达式,用于生成你要存储到列表中的值。在这个示例中,表达式为value ** 2, 它计算平方值。接下来,编写一个for() 循环,用于给表达式提供值,再加上右方括号。在这个示例中,for循环为for value in range(1,11), 它将值1-10提供给表达式value ** 2。注意,这儿的for语句末尾没有逗号。
要创建自己的列表解析,需要经过一定的练习。
2.5.5小试牛刀👿
🚩数到 20 :使用一个for 循环打印数字1~20(含)。
🚩 一百万 :创建一个列表,其中包含数字1~1 000 000,再使用一个for 循环将这些数字打印出来(如果输出的时间太长,按Ctrl + C停止输出,或关闭输出窗口)。
🚩 计算 1~1 000 000的总和 :创建一个列表,其中包含数字1~1 000 000,再使用min() 和max() 核实该列表确实是从1开始,到1 000 000结束的。另外,对这个列表 调用函数sum() ,看看Python将一百万个数字相加需要多长时间。
🚩 奇数 :通过给函数range() 指定第三个参数来创建一个列表,其中包含1~20的奇数;再使用一个for 循环将这些数字都打印出来。
🚩 3的倍数 :创建一个列表,其中包含3~30内能被3整除的数字;再使用一个for 循环将这个列表中的数字都打印出来。
🚩 立方 :将同一个数字乘三次称为立方。例如,在Python中,2的立方用2**3 表示。请创建一个列表,其中包含前10个整数(即1~10)的立方,再使用一个for 循 环将这些立方数都打印出来。 🚩立方解析 :使用列表解析生成一个列表,其中包含前10个整数的立方。
2.6使用列表的一部分
在前面你学习了如何单独访问单个列表元素。在下面介绍如何处理列表的部分元素——切片。
2.6.1切片
要创建切片,要指定第一个元素和最后一个元素的索引。与range()函数一样,Python在到达你指定的第二个索引器前面的元素后停止。下面示例处理的是一个运动队成员列表:
players = [ 'charles', 'martina', 'michael', 'florence', 'eli']
print(players[0:3])
print(players[2:4])
输出:
['charles', 'martina', 'michael']
['michael', 'florence']
你可以生成列表的任何子集。如果你没有指定列表的第一个索引,Python将自动从列表开头开始,同样要让切片终止于列表的末尾,你不设置末尾索引值即可:
players = [ 'charles', 'martina', 'michael', 'florence', 'eli']
print(players[:3])
print(players[2:])
输出:
['charles', 'martina', 'michael']
['michael', 'florence', 'eli']
前面的例子说过,负数索引返回列表末尾相应距离的元素,因此可以输出列表末尾的任何切片:
players = [ 'charles', 'martina', 'michael', 'florence', 'eli']
print(players[-3:])
输出:
['michael', 'florence', 'eli']
2.6.2遍历切片
如果要遍历列表的部分元素,可在for循环中使用切片。在下面的示例中,我们遍历前三名队员,并打印他们的名字:
players = ['charles','martina','michale','florence','eli']
print("Here are the first three players on my team:")
for player in players[:3]:
print(player.title())
输出:
Here are the first three players on my team:
Charles
Martina
Michale
2.6.3复制列表
下面介绍复制列表的工作原理,以及复制列表可提供极大帮助的一种情形。
要复制列表,可创建一个包含整个列表的切片,方法是同时省略起始索引和终止索引 ([ : ])。这让Python创建一个始于第一个元素,终止于最后一个元素的切片,即复制整个列表。
my_foods = [ 'pizza', 'falafel', 'carrot cake' ]
friend_foods = my_foods[:]
print(" My favorite foods are: ")
print(my_foods)
print(" \nMy friendis's favorite foods are: ")
print(friend_foods)
输出:
My favorite foods are:
['pizza', 'falafel', 'carrot cake']
My friendis's favorite foods are:
['pizza', 'falafel', 'carrot cake']
对比下面的代码:
my_foods = [ 'pizza', 'falafel', 'carrot cake' ]
friend_foods = my_foods
my_foods.append('cannoli')
friend_foods.append('ice cream')
print(" My favorite foods are: ")
print(my_foods)
print(" \nMy friendis's favorite foods are: ")
print(friend_foods)
输出:
My favorite foods are:
['pizza', 'falafel', 'carrot cake', 'cannoli', 'ice cream']
My friendis's favorite foods are:
['pizza', 'falafel', 'carrot cake', 'cannoli', 'ice cream']
显然,输出结果并不符合我们的预期。这里将my_foods赋值给friend_foods,而不是将my_foods的副存储到friend_foods。这种语法实际上是让Python将新变量friend_foods关联到包含在my_foods中的列表,因此两个变量都指向同一个列表。鉴于此,当我们将 'cannoli' 添加到my_foods中时,它也将出现在frend_foods中,同样,虽然 'ice cream' 好像只被加入到frend_foods中,但它将出现在这两个列表中。
2.6.4小试牛刀👿
🚩切片 :选择你在本章编写的一个程序,在末尾添加几行代码,以完成如下任务。
- 打印消息“The first three items in the list are:”,再使用切片来打印列表的前三个元素。
- 打印消息“Three items from the middle of the list are:”,再使用切片来打印列表中间的三个元素。
- 打印消息“The last three items in the list are:”,再使用切片来打印列表末尾的三个元素。
🚩 你的比萨和我的比萨 :在你为完成练习4-1而编写的程序中,创建比萨列表的副本,并将其存储到变量friend_pizzas 中,再完成如下任务。
- 在原来的比萨列表中添加一种比萨。
- 在列表friend_pizzas 中添加另一种比萨。
- 核实你有两个不同的列表。为此,打印消息“My favorite pizzas are:”,再使用一个for 循环来打印第一个列表;打印消息“My friend's favorite pizzas are:”,再使用一 个for 循环来打印第二个列表。核实新增的比萨被添加到了正确的列表中。
🚩使用多个循环 :在本节中,为节省篇幅,程序foods.py的每个版本都没有使用for 循环来打印列表。请选择一个版本的foods.py,在其中编写两个for 循环,将各个食品列表都打印出来。
2.7元组
列表非常适合用于存储在程序运行期间可能变化的数据集。列表是可以修改的,然而,有时候你需要创建一系列不可修改的元素,元组可以满足这种需求。Python将不能修改的值称为不可变的 ,而不可变的列表被称为元组。
2.7.1 定义元组
元组看起来犹如列表,但使用圆括号而不是方括号来标识。定义元组后,就可以使用索引来访问其元素,就像访问列表元素一样。 例如,如果有一个大小不应改变的矩形,可将其长度和宽度存储在一个元组中,从而确保它们是不能修改的:
dimensions = (200,50)
print( dimensions[0] )
print( dimensions[1] )
输出:
200
50
下面尝试修改元组dimensions中的元素,看看结果如何:
dimensions = (200,50)
dimensions[0] = 50
print( dimensions[0] )
会输出错误:
TypeError: 'tuple' object does not support item assignment
即元组的值是不能被修改的。
2.7.2遍历元组中的所有值
像列表一样,可以使用for循环来遍历元组中的所有值:
dimensions = ( 200, 50)
for dimension in demensions:
print(dimension)
输出:
200
50
2.7.3修改元组变量
虽然不能修改元组的元素,但可以给存储元组的变量赋值。因此,如果要修改前述矩阵的尺寸,可重新定义整个元组:
dimensions = ( 200, 50 )
printf("Original dimensions:")
for dimension in dimensions:
print(dimension)
dimensions = ( 400, 100 )
printf("Original dimensions:")
for dimension in dimensions:
print(dimension)
小结,在本章中,你学习了:
列表是什么以及如何使用其中的元素? 如何定义列表以及如何增删元素? 如何对列表进行永久性排序,以及如何为展现列表进行临时排序?如何确定列表的长度,以及在使用列表时如何避免索引错误。
如何高效的处理列表中的元素?如何使用for 循环遍历列表?如何创建数字列表以及对数字列表执行一些简单的操作?如何通过切片来使用列表的一部分和复制列表。还学习了元组及其基本操作。