列表简介
“列表让你能够在一个地方存储成组的信息,其中可以只包含几个元素,也可以包含数百万个元素。列表是可直接使用的最强大的Python功能之一,它融合了众多重要的编程概念.”
2.1 列表是什么
列表由一系列按特定顺序排列的元素组成,可以将任何东西加入列表中,其中的元素之间可以没有任何关系。
在Python中,用方括号([])来表示列表,并用逗号来分隔其中的元素。
示例,这个列表包含几种自行车:
bicycles.py
bicycles =
['trek', 'cannondale', 'redline', 'specialized']
print(bicycles)
Python将打印列表的内部表示,包括方括号:
输出:['trek', 'cannondale', 'redline', 'specialized']
2.1.1 访问列表元素
列表是有序集合,因此要访问列表的任何元素,只需将该元素的位置或索引告诉Python即可。要访问列表元素,可指出列表的名称,再指出元素的索引,并将其放在方括号内。
bicycles =
['trek', 'cannondale', 'redline', 'specialized']
print(bicycles[0].title())
当请求获取列表元素时,Python只返回该元素,而不包括方括号和引号:
输出:Trek
2.1.2 索引从0而不是1开始
在Python中,第一个列表元素的索引为0,而不是1,第二个列表元素的索引为1.
因此,要访问列表的任何元素,都可将其位置减1,并将结果作为索引.
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 bicycle was a " + bicycles[0].title() + "."
print(message)
输出:
My first bicycle was a Trek.
2.2 修改、添加和删除元素
创建的大多数列表都将是动态的,这意味着列表创建后将随着程序的运行增删元素.
2.2.1 修改列表元素
要修改列表元素,可指定列表名和要修改的元素的索引,再指定该元素的新值。
motorcycles.py
motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)
motorcycles[0] = 'ducati'
print(motorcycles)
输出:
['honda', 'yamaha', 'suzuki']
['ducati', 'yamaha', 'suzuki']
可以修改任何列表元素的值,而不仅仅是第一个元素的值.
2.2.2 在列表中添加元素
a.在列表末尾添加元素
方法:append()
在列表中添加新元素最简单的方式是将元素附加到列表末尾。给列表附加元素时,它将添加到列表末尾.
motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)
motorcycles.append('ducati')
print(motorcycles)
输出:
['honda', 'yamaha', 'suzuki']
['honda', 'yamaha', 'suzuki', 'ducati']
也可先创建一个空列表,再使用一系列的append()语句添加元素:
motorcycles = []motorcycles.append('honda')motorcycles.append('yamaha')motorcycles.append('suzuki')print(motorcycles)
输出:
['honda', 'yamaha', 'suzuki']
b.在列表中插入元素
使用方法insert()可在列表的任何位置添加新元素。为此,需要指定新元素的索引和值.
motorcycles = ['honda', 'yamaha', 'suzuki']motorcycles.insert(0,'ducati') print(motorcycles)
输出:
['ducati', 'honda', 'yamaha', 'suzuki']
2.2.3 从列表中删除元素
a.使用del语句删除元素
motorcycles = ['honda', 'yamaha', 'suzuki']print(motorcycles)del motorcycles[0]print(motorcycles)
输出:
['honda', 'yamaha', 'suzuki']['yamaha', 'suzuki']
使用del可删除任何位置处的列表元素,条件是知道其索.
motorcycles = ['honda', 'yamaha', 'suzuki']print(motorcycles)del motorcycles[1]print(motorcycles)
输出:
['honda', 'yamaha', 'suzuki']['honda', 'suzuki']
b.使用方法pop()删除元素
方法pop()可删除(弹出)列表末尾的元素:
motorcycles = ['honda', 'yamaha', 'suzuki']print(motorcycles)popped_motorcycle = motorcycles.pop()print(motorcycles)print(popped_motorcycle)
输出:
['honda', 'yamaha', 'suzuki']['honda', 'yamaha']suzuki
motorcycles = ['honda', 'yamaha', 'suzuki']last_owned = motorcycles.pop()print("The last motorcycle I owned was a " + last_owned.title() + ".")
输出:
The last motorcycle I owned was a Suzuki.
c.弹出列表中任何位置处的元素
实际上,可以使用pop()来删除列表中任何位置的元素,只需在括号中指定要删除的元素的索引即可.
motorcycles = ['honda', 'yamaha', 'suzuki']first_owned = motorcycles.pop(0)print('The first motorcycle I owned was a ' + first_owned.title() + '.')
输出:
The first motorcycle I owned was a Honda.
每当使用pop()时,被弹出的元素就不再在列表中了.
注:如果要从列表中删除一个元素且不再以任何方式使用它,就使用del语句;如果要在删除元素后还能继续使用它,就使用方法pop().
d.根据值删除元素
如果要删除的元素的值,可使用方法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)too_expensive = 'ducati'motorcycles.remove(too_expensive)print(motorcycles)print("\nA " + too_expensive.title() + " is too expensive for me.")
输出:
['honda', 'yamaha', 'suzuki', 'ducati']['honda', 'yamaha', 'suzuki']A Ducati is too expensive for me.
注:方法remove()只删除第一个指定的值。如果要删除的值可能在列表中出现多次,就需要使用循环来判断是否删除了所有这样的值.
2.3 组织列表
在创建的列表中,元素的排列顺序常常是无法预测的,因为并非总能控制用户提供数据的顺序。这虽然在大多数情况下都是不可避免的,但经常需要以特定的顺序呈现信息.
2.3.1 使用方法sort()对列表进行永久性排序
Python方法sort()能够较为轻松地对列表进行排序:
cars.py
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']
同样,对列表元素排列顺序的修改是永久性的.
2.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.
2.3.3 倒着打印列表
要反转列表元素的排列顺序,可使用方法reverse():
cars = ['bmw', 'audi', 'toyota', 'subaru']print(cars)cars.reverse()print(cars)
输出:
['bmw', 'audi', 'toyota', 'subaru']['subaru', 'toyota', 'audi', 'bmw']
方法reverse()永久性修改列表元素的排列顺序,但可随时恢复到原来的排列顺序,为此只需对列表再次调用reverse().
2.3.4 确定列表的长度
使用函数len()可快速获悉列表的长度:
>>>cars = ['bmw', 'audi', 'toyota', 'subaru']>>>len(cars) -> 4
注:Python计算列表元素数时从1开始,因此确定列表长度时不会遇到差一错误.
2.4 使用列表时避免索引错误
一个只包含三个元素的列表,却要求获取第四个元素:
motorcycles = ['honda', 'yamaha', 'suzuki']print(motorcycles[3])
索引错误:
Traceback (most recent call last):File "motorcycles.py", line 3, in <module>print(motorcycles[3])IndexError: list index out of range
注:谨记列表索引差一.