第三章:列表简介
列表是让你能够在一个地方存储成组的信息,其中可以只包含几个元素,也可以包含数百万个元素。
3.1 列表是什么?—— 有序集合
- 列表是由一系列按特定顺序排列的元素组成
- 我们可以创建包含字母表中所有字母、数字0~9或所有家庭成员姓名的列表;
- 也可以将任何东西加入列表中,其中的元素之间可以没有任何关系。
列表通常包含多个元素
# bicycles.py
bicycles = ['trek','cannondale','redline','specialized']
print(bicycles)
Python的print函数将打印列表的内部表示,包括方括号。
['trek','cannondale','redline','specialized']
3.1.1 访问列表元素
列表是有序集合。列表中任意元素的访问方法:只需要将该元素的位置(索引)告诉Python即可。
具体做法:
要访问列表元素,可指出列表的名称,再指出元素的索引,并将后置放在方括号内。
bicycles = ['trek','cannondale','redline','specialized']
print(bicycles[0])
# 字符串方法
print(bicycles[0].title())
trek
Trek
首字母大写
3.1.2 索引从0而不是1开始
在Python中,第一个列表元素的索引为0,而不是1。
根据这种简单的计数方式,要访问列表中的任何元素,都可以将其位置减1,并将结果作为索引。
# 返回列表中的第二个和第四个元素:
print(bicycles[1])
print(bicycles[3])
cannondale
specialized
Python为返回最后一个列表元素的提供了特殊语法:通过将索引指定为 -1,可以让Python返回最后一个列表元素。
# 通过负值索引访问列表元素
print(bicycles[-1])
specialized
负数索引:逆序访问
索引 -1 :最后一个列表元素
索引 -2:倒数第二个列表元素
索引 -3:倒数第三个列表元素
使用负数索引的好处:实现列表长度未知情况下访问列表尾部元素
我们经常需要在不知道列表长度的情况下访问最后的元素。
3.1.3 使用列表中的各个值
列表中值的使用等同于使用其他变量。
例如,可以使用 f字符串 根据列表中的值来创建消息。
bicycles = ['trek','cannondale','redline','specialized']
# 使用bicycles[0]的值生成了一个句子,并将其赋值给变量message。
message = f"My first bicycle was a {bicycles[0].title()}."
print(message)
My first bicycle was a Trek.
3.2 修改、添加和删除元素
列表:静态 & 动态(更多),动态列表需要在列表创建后随着程序的运行增删元素。
3.2.1 修改列表元素
- 修改列表元素和访问列表元素方法类似
- 如果需要修改列表元素,可以指定列表名和要修改的元素的索引,再指定该元素的新值。
// motorcycles.py
motorcycles = ['honda','yamha','suzuki']
print(motorcycles)
motorcycles[0] = 'ducati'
print(motorcycles)
['honda','yamha','suzuki']
['ducati','yamha','suzuli']
输出表明:第一个元素的值确实编了,但是其他列表元素的值没变。
我们可以修改任意列表元素的值,而不仅仅是第一个元素的值。
3.2.2 在列表中添加元素
Python提供了多种在既有列表中添加新数据的方式:
1. 在列表末尾添加元素
使用append函数将元素附加到列表末尾
motorcycles = ['honda','yamha','suzuki']
print(bicycles)
motorcycles.append('ducati')
print(motorcycles)
['honda','yamha','suzuki']
['honda','yamha','suzuki','duzati]
使用append函数可以实现动态地创建列表。
首先,可以先创建一个空列表,再使用一系列函数调用append()来添加元素。
motorcycles = []
motorcycles.append('honda')
motorcycles.append('yamha')
motorcycles.append('suzuki')
print(motorcycles)
['honda','yamha','suzuki']
注:
- 这种创建列表的方式极为常见,因为经常要等程序运行后,才知道用户在程序中存储哪些数据。
- 为控制用户,可以首先创建一个空列表,用于存储用户将要输入的值,然后将用户提供的每个新值附加到列表中。
2. 在列表中插入元素
使用 insert函数可以在列表的任意位置添加新元素。
我们需要指定新元素的索引和值。
motorcycles = ['honda','yamha','suzuki']
motorcycles.insert(0,'ducati')
print(motorcycles)
['ducati','honda','yamha','suzuki']
这里的 insert函数实现了将列表新值'ducati'
插入到了列表开头。具体来说,insert 操作在索引 0 处添加空间,并将值 'ducati'
存储在这个位置,insert操作将列表中既有的每个元素都右移一个位置。
3.2.3 从列表中删除元素
Python可以根据位置或值来删除列表中的元素。
1. 使用 del 语句删除元素
如果知道要删除的元素在列表中的位置,可以使用del语句实现删除操作。
motorcycles = ['honda','yamha','suzuki']
print(motorcycles)
# 使用del删除列表中的第一个元素
del motorcylces[0]
print(motorcycles)
['honda','yamha','suzuki']
['yamha','suzuki']
使用 del 可以删除任意位置处的列表元素,条件是知道其索引。
del motorcycles[1]
使用 del 语句将值从列表中删除后,就无法再次访问了
2. 使用 pop() 方法删除元素
pop() 方法删除列表末尾的元素,并让你能够接着使用它。
pop弹栈:列表就像一个栈,删除列表末尾的元素相当于弹出栈顶元素。
motorcycles = ['honda','yamha','suzuki']
print(motorcycles)
popped_motorcycle = motorcycles.pop()
print(motorcycles)
print(poped_motorcycle)
-
首先,定义并打印列表 motorcycles;
-
接下来,从这个列表中弹出一个值,并将其赋值给变量popped_motorcycle中;
-
然后打印这个列表,以核实从中删除了一个值;
-
最后,打印弹出的值,来证明我们依然能够访问被删除的值。
['honda','yamha','suzuki']
['honda','yamha']
suzuki
例:假设列表中摩托车是按照时间顺序存储的
motorcycles = ['honda','yamha','suzuki']
last_owned = motorcycles.pop()
print(f"The last motorcycle I owned was a {last_owned.title()}.")
输出是打印一条消息,指出最后购买的是哪款摩托车:
The last motorcycle I owned was a Suzuku.
3. 弹出列表中任何位置处的元素
可以使用 pop() 来删除列表中任意位置的元素,只需要在圆括号中指定要删除元素的索引即可。
别忘了,每当使用 pop() 时,被弹出元素就不再在列表中了。
- 判断该使用 del语句还是 pop() 方法的标准是:
- 如果你要从列表中删除一个元素,且不再以任何方式使用它,就使用 del 语句;
- 如果你要在删除元素后还继续使用它,就使用方法 pop() 。
4. 根据值删除元素
在只知道要删除元素的值,而不知道要从列表中删除的值所处得位置时,可使用 remove() 方法
注意:方法 remove() 只删除第一个指定的值。如果要删除的值可能在列表中出现多次,就需要使用循环来确保每个值都删除。
使用 remove() 方法从列表中删除元素时,也可以接着使用它的值。
motorcycles = ['honda','yamha','suzuki','ducati']
print(motorcycles)
too_expensive = 'ducati'
motorcycles.remove(too_expensive)
print(too_expensive)
print(f"\nA {too_expensive.title()} is too expensive for me.")
['honda','yamha','suzuki','ducati']
['honda','yamha','suzuki']
A Duzuki is too expensive for me.
可以看到,值 'ducati'
已经从列表中删除,但是可以通过变量 too_expensive
来访问。