定义
列表(list)由一系列按特定顺序排列的元素组成。在 Python 中,用方括号[]
表⽰列表,⽤逗号分隔其中的元素。
示例:
# 定义一个水果列表
fruits = ["apple", "banana", "cherry"]
# 打印列表
print(fruits)
输出结果:
['apple', 'banana', 'cherry']
访问列表元素
列表是有序集合,因此要访问列表的任何元素,只需将该元素的位置索引
告诉 Python 即可。要访问列表元素,可指出列表的名称,再指出元素的索引,并将后者放在方括号
内。
在 Python 中,第⼀个列表元素的索引为0
,⽽不是1
。
使用下标索引来访问列表中的值,同样你也可以使用方括号的形式截取子列表。
示例:
# 定义一个水果列表
fruits = ["apple", "banana", "cherry"]
# 打印列表的第一个元素
print(fruits[0])
# 打印列表的第二个元素
print(fruits[1])
# 打印列表的第三个元素
print(fruits[2])
# 打印列表
print("l like eat " + fruits[1].title())
输出结果:
apple
banana
cherry
l like eat Banana
修改列表中的元素
修改列表元素的语法与访问列表元素的语法类似,也是通过索引
来修改。
示例:
# 定义一个水果列表
fruits = ["apple", "banana", "cherry"]
# 将第一个元素为 "apple" 修改为 "orange"
fruits[0] = "orange"
# 打印修改后的列表
print(fruits)
输出结果:
['orange', 'banana', 'cherry']
在列表中添加元素
在日常生活中,我们会用到很多添加元素的操作。比如:季节更换,水果店里有了新的水果,我们需要添加新的水果到菜单中。
在列表末尾添加元素
在列表添加新元素时,最简单的方法就是添加新元素到列表的末尾。
示例:
# 定义一个水果列表
fruits = ["apple", "banana", "cherry"]
# 添加 orange 到列表
fruits.append("orange")
# 打印修改后的列表
print(fruits)
输出结果:
['apple', 'banana', 'cherry', 'orange']
上述案例中append()
方法将元素orange
添加到了列表的末尾。
在列表中插入元素
与添加元素不同的是你可以在列表的任意位置插入元素。
示例:
# 定义一个水果列表
fruits = ["apple", "banana", "cherry"]
# 插入 orange 到列表索引 1 处
fruits.insert(1,"orange")
# 打印修改后的列表
print(fruits)
输出结果:
['apple', 'orange', 'banana', 'cherry']
上述案例中insert(index,value)
方法将元素插入列表中。
index | value |
---|---|
索引 | 值 |
删除列表中的元素
使用del
语句删除元素
使用del
语句可删除任何位置处的列表元素,条件是知道其索引。
示例:
# 定义一个水果列表
fruits = ["apple", "banana", "cherry"]
# 删除 apple
del fruits[0]
# 打印修改后的列表
print(fruits)
输出结果:
['banana', 'cherry']
使用pop()
方法删除元素
有时候,你要将元素从列表中删除,并接着使⽤它的值。pop()
⽅法删除列表末尾的元素,并让你能够接着使⽤它。列表就像⼀个栈,⽽删除列表末尾的元素相当于弹出栈顶元素。
示例:
# 定义一个水果列表
fruits = ["apple", "banana", "cherry"]
# 删除列表中的最后一个元素
fruits.pop()
# 打印修改后的列表
print(fruits)
输出结果:
['apple', 'banana']
删除列表中任意位置的元素
实际上,也可以使⽤pop()
方法删除列表中任意位置的元素,只需要在括号中指定要删除的元素的索引即可。
示例:
# 定义一个水果列表
fruits = ["apple", "banana", "cherry"]
# 删除列表中第二个元素
fruits.pop(1)
# 打印修改后的列表
print(fruits)
输出结果:
['apple', 'cherry']
根据值删除元素
有时候,你不知道要从列表中删除的值在哪个位置,只知道要删除的元素的值,可使⽤remove()
⽅法。
示例:
# 定义一个水果列表
fruits = ["apple", "banana", "cherry"]
# 删除 apple 元素
fruits.remove("apple")
# 打印修改后的列表
print(fruits)
输出结果:
['banana', 'cherry']
remove()
⽅法让 Python 确定apple
出现在列表的什么地⽅,并将该元素删除。使⽤remove()
方法从列表中删除元素后,也可继续使⽤它的值。
示例:
# 定义一个水果列表
fruits = ["apple", "banana", "cherry"]
# 打印列表
print(fruits)
# 创建新的变量
new_fruit = "cherry"
# 通过变量删除水果
fruits.remove(new_fruit)
# 打印修改后的列表
print(fruits)
输出结果:
['apple', 'banana', 'cherry']
['apple', 'banana']
列表的排序
在你创建的列表中,元素的排列顺序常常是⽆法预测的,因为你并⾮总能控制⽤户提供数据的顺序。这虽然在⼤多数情况下是不可避免的,但你经常需要以特定的顺序呈现信息。你有时候希望保留列表元素最初的排列顺序,⽽有时候⼜需要调整排列顺序。Python 提供了很多管理列表的⽅式,可根据具体情况选⽤。
使⽤sort()
⽅法对列表进⾏永久排序
示例:
# 定义一个水果列表
fruits = ["orange", "pear", "lemon", "cherry", "banana"]
# 打印列表
print(fruits)
# 对水果进行正向排序 A-Z
fruits.sort()
# 打印排序后的水果列表
print(fruits)
输出结果:
['orange', 'pear', 'lemon', 'cherry', 'banana']
['banana', 'cherry', 'lemon', 'orange', 'pear']
sort()
⽅法能永久地修改列表元素的排列顺序。现在,水果是按字⺟顺序排列的,再也⽆法恢复到原来的排列顺序。
还可以按与字⺟顺序相反的顺序排列列表元素,只需向sort()
⽅法传递参数reverse=True
即可。
示例:
# 定义一个水果列表
fruits = ["orange", "pear", "lemon", "cherry", "banana"]
# 打印水果列表
print(fruits)
# 对水果进行反向排序 Z-A
fruits.sort(reverse=True)
# 打印排序后的水果列表
print(fruits)
输出结果:
['orange', 'pear', 'lemon', 'cherry', 'banana']
['pear', 'orange', 'lemon', 'cherry', 'banana']
使⽤sorted()
函数对列表进⾏临时排序
要保留列表元素原来的排列顺序,并以特定的顺序呈现它们,可使⽤sorted()
函数。sorted()
函数让你能够按特定顺序显⽰列表元素,同时不影响它们在列表中的排列顺序。
示例:
# 定义一个水果列表
fruits = ["orange", "pear", "lemon", "cherry", "banana"]
# 打印列表
print(fruits)
# 打印排序后的列表
print(sorted(fruits))
# 打印列表
print(fruits)
输出结果:
['orange', 'pear', 'lemon', 'cherry', 'banana']
['banana', 'cherry', 'lemon', 'orange', 'pear']
['orange', 'pear', 'lemon', 'cherry', 'banana']
在调⽤sorted()
函数后,列表元素的排列顺序并没有变。如果要按与字⺟顺序相反的顺序显⽰列表,也可向sorted()
函数传递参数reverse=True
。
使⽤reverse()
⽅法对列表进⾏反转
reverse()
⽅法不是按与字⺟顺序相反的顺序排列列表元素,只是反转列表元素的排列顺序。reverse()
⽅法会永久地修改列表元素的排列顺序,但可随时恢复到原来的排列顺序,只需对列表再次调⽤reverse()
⽅法即可。
示例:
# 定义一个水果列表
fruits = ["orange", "pear", "lemon", "cherry", "banana"]
# 打印水果列表
print(fruits)
# 对列表元素进行反转
fruits.reverse()
# 打印列表
print(fruits)
输出结果:
['orange', 'pear', 'lemon', 'cherry', 'banana']
['banana', 'cherry', 'lemon', 'pear', 'orange']
确定列表的⻓度
使⽤len()
函数可快速获悉列表的⻓度。
示例:
# 定义一个水果列表
fruits = ["orange", "pear", "lemon", "cherry", "banana"]
# 打印水果列表
print(fruits)
# 打印列表的长度
print(len(fruits))
输出结果:
['orange', 'pear', 'lemon', 'cherry', 'banana']
5
Python 在计算列表元素的个数时是从1
开始计算的。
遍历整个列表
假设我们有⼀个水果名单,需要将其中每个水果的名字都打印出来。为此,可以分别获取名单中的每个名字,但这种做法会导致许多问题。每当名单的⻓度发⽣变化时,都必须修改代码。使⽤ for 循环,可让 Python 去处理每个元素,从⽽避免这些问题。
示例:
# 定义一个水果列表
fruits = ["orange", "pear", "lemon", "cherry", "banana"]
# 遍历列表中的每个水果
for fruit in fruits:
# 打印列表
print(fruit)
输出结果:
orange
pear
lemon
cherry
banana
位于 for 语句后⾯且属于循环组成部分的代码⾏,⼀定要缩进。如果忘记缩进,Python 会提醒。for 语句末尾的冒号告诉 Python,下⼀⾏是循环的第⼀⾏。如果不⼩⼼遗漏了冒号,将导致语法错误。
处理数值列表
列表⾮常适合⽤于存储数值集合,⽽ Python 提供了很多⼯具,可帮助你⾼效地处理数值列表。明⽩如何有效地使⽤这些⼯具后,即便列表包含数百万个元素,你编写的代码也能运⾏得很好。
使⽤range()
函数生成数
在 Python 中使用range()
函数能让你能够轻松地⽣成⼀系列的数。
示例:
# 遍历数字 1-4,并打印每个数字。
for value in range(1, 5):
print(value)
输出结果:
1
2
3
4
range()
函数让 Python 从指定的第⼀个值开始数,并在到达指定的第⼆个值时停⽌,因此输出不包含第⼆个值(这⾥为 5)。
在调⽤range()
函数时,也可只指定⼀个参数,这样它将从0
开始,例如:range(6)
返回数0〜5
。
示例:
# 遍历数字 1-5,并打印每个数字。
for value in range(6):
print(value)
输出结果:
0
1
2
3
4
5
使⽤range()
函数创建数值列表
要创建数值列表,可使⽤list()
函数将range()
函数的结果直接转换为列表。如果将range()
函数作为list()
的参数,输出将是⼀个数值列表。
示例:
# 创建一个包含 1-5 的列表,赋值给 numbers 变量
numbers = list(range(1, 6))
print(numbers)
输出结果:
[1, 2, 3, 4, 5]
在使⽤range()
函数时,还可指定步⻓。为此,可以给这个函数指定第三个参数,Python 将根据这个步⻓来⽣成数。
示例:
# 打印 1〜10 的偶数
even_numbers = list(range(2, 11, 2))
print(even_numbers)
输出结果:
[2, 4, 6, 8, 10]
在这个⽰例中,range()
函数从2
开始数,然后不断地加2
,直到达到或超过终值11
。
简单的统计计算
有几个 Python 函数可帮助你处理数值列表,你可以轻松地找出数值列表中的最⼤值、最⼩值和总和。
示例:
# 创建数字列表
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
# 计算列表中的最小值
print(min(numbers))
# 计算列表中的最大值
print(max(numbers))
# 计算列表中的总和
print(sum(numbers))
输出结果:
0
9
45
列表推导式
列表推导式(list comprehension)将 for 循环和创建新元素的代码合并成⼀⾏,并⾃动追加新元素。
示例:
squares = [value**2 for value in range(1, 11)]
print(squares)
输出结果:
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
上述示例中便是列表推导式的一种简单应用,或许有点复杂,下面使用常规写法来帮助大家理解。
示例:
# 创建一个空列表
squares = []
# 遍历数字 1-10
for value in range(1, 11):
# 将每个数字的平方添加到列表中
squares.append(value ** 2)
# 打印平⽅数列表
print(squares)
输出结果:
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
要创建列表推导式,需要⼀定的练习,但能够熟练地创建常规列表后,你会发现这样做是完全值得的。当你觉得编写三四⾏代码来⽣成列表有些烦琐时,就应考虑创建列表推导式了。
切⽚
前面我们学习了如何访问单个列表元素以及如何处理列表的所有元素。除此之外,你还可以处理列表的部分元素,在 Python 中称为切⽚(slice)。
使用切片
要创建切⽚,可指定要使⽤的第⼀个元素和最后⼀个元素的索引。与range()
函数⼀样,Python 在到达指定的第⼆个索引之前的元素时停⽌。要输出列表中的前三个元素,需要指定索引0
和3
,这将返回索引分别为0
、1
和2
的元素。
示例:
# 定义一个水果列表
fruits = ["orange", "pear", "lemon", "cherry", "banana"]
# 打印列表的前三个元素
print(fruits[0:3])
输出结果:
['orange', 'pear', 'lemon']
上述代码打印该列表的⼀个切⽚,输出也是⼀个列表,其中包含前三个元素。
你可以⽣成列表的任意⼦集,如果要提取列表的第⼆、第三和第四个元素,可将起始索引指定为1
,并将终⽌索引指定为4
。
示例:
# 定义一个水果列表
fruits = ["orange", "pear", "lemon", "cherry", "banana"]
# 打印列表
print(fruits[1:4])
输出结果:
['pear', 'lemon', 'cherry']
如果没有指定第⼀个索引,Python 将⾃动从列表开头开始。
示例:
# 定义一个水果列表
fruits = ["orange", "pear", "lemon", "cherry", "banana"]
# 打印列表
print(fruits[0:4])
输出结果:
['orange', 'pear', 'lemon', 'cherry']
要让切⽚终⽌于列表末尾,也可使⽤类似的语法。如果要提取从第三个元素到列表末尾的所有元素,可将起始索引指定为2
,并省略终⽌索引。
示例:
# 定义一个水果列表
fruits = ["orange", "pear", "lemon", "cherry", "banana"]
# 打印列表
print(fruits[2:])
输出结果:
['lemon', 'cherry', 'banana']
⽆论列表多⻓,这种语法都能够让你输出从特定位置到列表末尾的所有元素。负数索引返回与列表末尾有相应距离的元素,因此可以输出列表末尾的任意切⽚。
示例:
# 定义一个水果列表
fruits = ["orange", "pear", "lemon", "cherry", "banana"]
# 打印列表
print(fruits[-3:])
输出结果:
['lemon', 'cherry', 'banana']
遍历切⽚
如果要遍历列表的部分元素,可在 for 循环中使⽤切⽚。
示例:
# 定义一个水果列表
fruits = ["orange", "pear", "lemon", "cherry", "banana"]
# 遍历列表
for fruit in fruits[:3]:
# 打印列表
print(fruit.title())
输出结果:
Orange
Pear
Lemon
复制列表
假设有⼀个列表包含你最喜欢的五种水果,⽽你想再创建⼀个列表,并在其中包含你的⼀个朋友喜欢的所有水果。巧的是,你喜欢的水果,这个朋友也都喜欢,因此可通过复制来创建这个列表。
示例:
# 创建我的水果列表
my_fruits = ["orange", "pear", "lemon", "cherry", "banana"]
# 将我的水果列表复制给朋友
friend_fruits = my_fruits[:]
# 打印我的水果列表
print(my_fruits)
# 打印朋友的水果列表
print(friend_fruits)
输出结果:
['orange', 'pear', 'lemon', 'cherry', 'banana']
['orange', 'pear', 'lemon', 'cherry', 'banana']