《Python从入门到实践》读书笔记——第三章 列表简介
1 列表是什么
列表 由一系列按特定顺序你排列的元素组成,其中的元素之间可以没有任何关系.
列表中通常包含多个元素,因此给列表指定一个表示复数的名称(如letters,digits 或 names)是个不错的主意
在Python中, 用方括号([ ])表示裂变,并用逗号分隔其中的元素 .
bicycles = ['trek' , 'cannondale' , 'redline' , 'specialized']
print(bicycles)
如果让Python将列表打印出来,Pyhton将打印列表的内部表示, 包括方括号 :
['trek', 'cannondale', 'redline', 'specialized']
鉴于这不是你要让用户看到的输出,下面来学习如何访问列表元素
1.1 访问列表元素
要访问列表的任意元素,只需将 该元素的位置(索引) 告诉Python即可 , 要访问列表元素 , 可指出列表的名称, 再指出元素的索引, 并将后者放在方括号内
bicycles = ['trek' , 'cannondale' , 'redline' , 'specialized']
print(bicycles[0])
当你请求获取列表元素时, Python只返回该元素, 而不包括方括号:
trek
还可以对任意列表元素调用字符串方法,例如
bicycles = ['trek' , 'cannondale' , 'redline' , 'specialized']
print(bicycles[0].title())
#输出
Trek
1.2 索引从0而不是从1开始
要访问列表的任何元素, 都可将其位置减1, 并将结果作为索引, 例如要访问第四个列表元素, 可使用索引3.
Python为访问 最后一个列表元素 提供了一种特殊语法. 通过将索引指定为 -1 ,可让Python返回最后一个列表元素.
这种约定也适用于其他负数索引. 例如, 索引-2返回倒数第二个列表元素, 索引-3返回倒数第三个列表元素, 以此类推
1.3 使用列表中的各个值
你可以 像使用其他变量一样 使用列表中的各个值,例如:
bicycles = ['trek' , 'cannondale' , 'redline' , 'specialized']
message = f"My first bicycle was a {bicycles[0].title()}."
print(message)
#输出
My first bicycle was a Trek.
2 修改、添加和删除元素
你创建的大多数列表将是 动态 的, 这意味着列表创建后, 将随着程序的运行增删元素
2.1 修改列表元素
要修改列表元素,可指定列表名和要修改的元素的索引,在指定该元素的新值.
motocycles = ['hoda' , 'yamaha' , 'suzuki']
print(motocycles)
motocycles[0] = 'ducati'
print(motocycles)
你可以修改任意列表元素的值,而不仅仅是第一个元素的值
2.2 在列表中添加元素
2.2.1 在列表末尾添加元素
在列表中添加新元素时, 最简单的办法是将元素 附加(append) 到列表. 给列表 附加 元素时, 它将 添加到列表末尾 .
motocycles = ['hoda' , 'yamaha' , 'suzuki']
print(motocycles)
motocycles.append('ducati')
print(motocycles)
方法append()让动态将元素 ‘ducati’ 添加到列表末尾, 而补影响列表中的其他所有元素.
方法append()让动态地创建元素易如反掌. 例如, 你可以先创建一个空列表, 再使用一系列函数调用 append() 来添加元素.
motorcycles = []
motorcylces.append('honda')
motorcycles.append('yamaha')
motorcycles.append('suzuki')
print(motorcycles)
这种创建列表的方式极其常见, 因为经常要等程序运行后, 你才知道用户要在程序中存储哪些数据. 为控制用户, 可首先创建一个空列表, 用于存储用户将要输入的值, 然后将用户提供的每个新值附加到列表中.
2.2.2 在列表中插入元素
使用 方法insert()
motorcycles = ['honda' , 'yamaha' , 'suzuki']
motorcycles.insert(0,'ducati')
print(motorcycles)
#输出
['ducati', 'honda', 'yamaha', 'suzuki']
在这个示例中, 值 ‘ducati’ 被插入到了列表开头. 方法 insert() 在索引 0 添加空间, 并将值 ‘ducati’ 存储到这个地方. 这种操作将列表中既有的每个元素都右移一个位置
2.3 从列表中删除元素
2.3.1 使用del语句删除元素
如果 知道要删除的元素在列表中的位置 , 可使用 del 语句
motorcycles = ['honda' , 'yamaha' , 'suzuki']
print(motorcycles)
del motorcycles[0]
print motorcylces
使用 del 可删除任意位置处的列表元素, 条件是知道其索引, 使用 del 语句将值从列表中删除后, 你就无法再访问它了
2.3.2 使用方法 pop() 删除元素
方法 pop()
删除列表末尾的元素,并让你能够接着使用它 . 术语 弹出(pop) 源自这样的类比: 列表就像一个栈, 而删除列表末尾的元素相当于弹出栈顶元素.
motorcycles = ['honda' , 'yamaha' , 'suzuki']
print(motorcycles)
popped_motorcycles = motorcycles.pop()
print(motorcycles)
print(popped_motorcycles)
#输出
['honda', 'yamaha', 'suzuki']
['honda', 'yamaha']
suzuki
输出表明, 列表末尾的值 ‘suzuki’ 已删除, 他现在被赋给了变量popped_motorcycles
最后打印出弹出的值,证明我们依然能够访问被删除的值
方法 pop()
有什么用处呢? 假设列表中的摩托车是按购买时间存储的,就可以使用方法 pop()
打印一条消息, 指出最后购买的是哪款摩托车:
motorcycles = ['honda' , 'yamaha' , 'suzuki']
last_owned = motorcycles.pop()
print(f'The last motorcycle I owned was a {last_owned.title()}.')
#输出是一个简单的句子,指出来最新购买的是哪款摩托车
The last motorcycle I owned was a Suzuki.
2.3.3 弹出列表中任何位置处的元素
可以使用 pop()
来删除列表中任意位置的元素,只需 在括号用指定要删除元素的索引 即可.
motorcycles = ['honda' , 'yamaha' , 'suzuki']
first_owned = motorcycles.pop(0)
print(f"The first motorcycle I owned was a {first_owned.title()}.")
#首先弹出列表中的第一款摩托车,然后打印一条有关这辆摩托车的消息.输出是一个简单的句子,描述了我购买的第一辆摩托车
The first motorcycle I owned was a Honda.
记住, 每当你使 pop()
时,被弹出的元素就不再在列表中了
如果你不确定该使用
del
语句还是pop()
方法,下面是一个简单的判断标准: 如果你要从列表中删除一个元素,且不再已任何方式使用它,就使用del
语句; 如果你要在删除元素后还能继续使用它, 就使用方法pop()
2.3.4 根据值删除元素
如果不知道从列表中删除的值所处的位置, 只直到要删除的元素的值, 可以使用方法 remove()
motorcycles = ['honda' , 'yamaha' , 'suzuki','ducati']
print(motorcycles)
motorcycles.remove('ducati')
print(motorcycles)
#
['honda', 'yamaha', 'suzuki', 'ducati']
['honda', 'yamaha', 'suzuki']
使用 remove()
删除代码时,也可接着使用它的值
motorcycles = ['honda' , 'yamaha' , 'suzuki','ducati']
print(motorcycles)
top_expensive = 'ducati'
motorcycles.remove(top_expensive)
print(motorcycles)
print(f"\nA {top_expensive.title()} is too expensive for me.")
#
['honda', 'yamaha', 'suzuki', 'ducati']
['honda', 'yamaha', 'suzuki']
A Ducati is too expensive for me.
注意: 方法
remove()
只删除第一个指定的值,如要删除的值可能在列表中出现多次,就需要使用循环来确保将每个值都删除.
3 组织列表
3.1 使用方法 sort()
对列表永久排序
Pyhton方法 sort()
让你能够较为轻松地对列表进行排序. 假设你有一个汽车列表, 并要让其中的汽车按字母顺序排列. 为简化这项任务, 假设该列表中的所有值都是小写的.
cars = ['bmw', 'audi', 'toyota', 'subaru']
cars.sort()
print(cars)
#
['audi', 'bmw', 'subaru', 'toyota']
方法 sort()
永久地 修改列表元素的排列顺序. 现在, 汽车是按字母顺序排列的, 再也无法恢复到原来的排列顺序.
还可以 按与字母顺序相反的顺序排列列表元素 ,只需向 sort()
方法传递参数 reverse = True 即可
cars = ['bmw', 'audi', 'toyota', 'subaru']
cars.sort(reverse=True)
print(cars)
#
['toyota', 'subaru', 'bmw', 'audi']
3.2 使用函数 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
print``(``sorted``(cars``,``reverse``=``True``))
注意: 在并非所有的值都是小写时, 按字母顺序排列列表要复杂些. 决定排列顺序时 有多种解读大写字母的方法, 要指定准确的排列顺序, 可能比我们这里所做的要复杂. 然而, 大多数排列方式是以本节介绍的知识为基础的.
3.3 倒着打印列表
要 反转列表元素的排列顺序 ,可使用方法 reverse()
cars = ['bmw', 'audi', 'toyota', 'subaru']
print(cars)
cars.reverse()
print(cars)
#
['bmw', 'audi', 'toyota', 'subaru']
['subaru', 'toyota', 'audi', 'bmw']
3.4 确定列表的长度
使用函数 len()
可快速 获取列表的长度 .
>>> cars = ['bmw' ,'audi; ,'toyota' ,'subaru']
>>> len(cars)
4
Python计算列表元素数时从1开始, 因此确定列表长度时, 你应该不会遇到差一错误.
4 使用列表时避免索引错误
- 每当需要访问最后一个列表元素时, 都可以使用索引-1
- 仅当列表为空时, 这种访问最后一个元素的方式才会导致错误
发生索引错误却找不到解决办法时, 请尝试将列表或其长度打印出来. 列表可能与你以为的截然不同, 在程序对其进行了动态处理时尤其如此. 通过查看列表或其包含的元素数, 可帮助你找出这种逻辑错误
5 小结
- 修改列表元素
motocycles[0] = 'ducati'
- 将值添加到列表末尾
motorcylces.append('honda')
- 在列表中插入元素
motorcycles.insert(0,'ducati')
- 在列表中删除元素
del motorcycles[0]
popped_motorcycles = motorcycles.pop()
first_owned = motorcycles.pop(0)
motorcycles.remove('ducati')
- 组织列表
- 永久排序
cars.sort()
- 按与字母顺序相反的顺序排序
cars.sort(reverse=True)
- 按与字母顺序相反的顺序排序
- 临时排序
print(sorted(cars))
- 如果要按与字母顺序相反的顺序显示列表, 也可向函数
sorted()
传递参数 reverse=True
- 如果要按与字母顺序相反的顺序显示列表, 也可向函数
- 倒着打印列表
cars.reverse()
print(cars)
- 确定列表的长度
len(cars)
- 永久排序