0%

第四章 操作列表

4.1 遍历整个列表

1
2
3
names = ["zhang", "li", "wang", "chen"]
for name in names:
print(name)

输出结果为:

1
2
3
4
zhang
li
wang
chen

4.1.1 深入研究循环

在编写for循环时,可以给依次与列表中每个值相关联的临时变量指定任意名称。选择描述单个列表元素的有意义名称大有脾益。这些命名约定有助于你明白for循环中将对每个元素执行的操作。使用单数和复数式的名称,可以帮助砍断代码段处理的是单个列表元素还是整个列表。

1
2
3
for cat in cats:
for dog in dogs:
for item in list_of_items:

4.1.2 在for循环中执行更多操作

1
2
3
4
names = ["zhang", "li", "wang", "chen"]
for name in names:
print(f"my name is {name}")
print("nice to meet you!\n")

输出结果为:

1
2
3
4
5
6
7
8
9
10
11
my name is zhang
nice to meet you!

my name is li
nice to meet you!

my name is wang
nice to meet you!

my name is chen
nice to meet you!

每个缩进的代码都是循环的一部分,将针对列表中的每个值都执行一次。

4.1.3 在for循环结束后执行一些操作

1
2
3
4
5
names = ["zhang", "li", "wang", "chen"]
for name in names:
print(f"my name is {name}")
print("nice to meet you!\n")
print("thank you, everyone~~~")

输出结果为:

1
2
3
4
5
6
7
8
9
10
11
12
13
my name is zhang
nice to meet you!

my name is li
nice to meet you!

my name is wang
nice to meet you!

my name is chen
nice to meet you!

thank you, everyone~~~

4.2 避免缩进错误

Python根据缩进来判断代码行与前一个代码行的关系。Python通过使用缩进让代码更易读。简单地说,它要求你使用缩进让代码整洁而结构清晰。

4.3 创建数值列表

列表非常适合用于存储数字集合,而Python提供了很多工具,可帮助你高效地处理数字列表。

4.3.1 使用函数range()

Python函数range()让你能够轻松地生成你系列数。

1
2
for number in range(1, 5):
print(number)

输出结果为:

1
2
3
4
1
2
3
4

函数range()让Python从指定的第一个值开始数,并在到达指定的第二个值时停止。因为它在第二个值处停止,所以输出不包含该值。

调用函数range()时,也可只指定一个参数,这样它将从0开始。例如,range(6)返回数0~5。

4.3.2 使用range()创建数字列表

要创建数字列表,可以使用函数list()将range()的结果直接转换为列表。

1
2
numbers = list(range(1, 6))
print(numbers)

输出结果为:

1
[1, 2, 3, 4, 5]

使用函数range()时,还可指定步长。

1
2
even_numbers = list(range(2, 11, 2))
print(even_numbers)

输出结果为:

1
[2, 4, 6, 8, 10]

4.3.3 对数字列表执行简单的统计计算

有几个专门用于处理数字列表的Python函数。可以轻松地找出数字列表的最大值、最小值和总和:

1
2
3
4
numbers = [1, 2, 3, 4, 5, 6, 7, 8]
print(min(numbers))
print(max(numbers))
print(sum(numbers))

输出结果为:

1
2
3
1
8
36

4.3.4 列表解析

列表解析将for循环和创建新元素的代码合并成一行,并自动附加新元素。

1
2
squares = [number**2 for number in range(1,11)]
print(squares)

输出结果为:

1
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

4.4 使用列表的一部分

处理列表的部分元素,Python称之为切片

4.4.1 切片

要创建切片,可指定要使用的第一个元素和最后一个元素的索引。与函数range()一样,Python在到达第二个索引之前的元素后停止。要输出列表中的前三个元素,需要指定索引0和3,这将返回索引为0、1和2的元素。

1
2
numbers = [1, 2, 3, 4, 5, 6]
print(numbers[0:3])

输出结果为:

1
[1, 2, 3]

如果没有指定第一个索引,Python将自动从列表开头开始;要让切片终止于列表末尾,也可使用类似的语法。

负数索引返回离列表末尾相应距离的元素,因此可以输出列表末尾的任意切片。

1
2
numbers = [1, 2, 3, 4, 5, 6]
print(numbers[-3:])

输出结果为:

1
[4, 5, 6]

可在表示切片的方括号内指定第三值。这个值告诉Python在指定范围内每隔多少元素提取一个。

4.4.2 遍历切片

1
2
3
numbers = [1, 2, 3, 4, 5, 6]
for number in numbers[1:5]
print(number)

输出结果为:

1
2
3
4
2
3
4
5

4.4.3 复制列表

要复制列表,可创建一个包含整个列表的切片,方法是同时省略起始索引和终止索引([:])。这让Python创建一个始于第一个元素,终止于最后一个元素的切片,即整个列表的副本。

1
2
3
4
numbers = [1, 2, 3, 4, 5, 6]
print(numbers)
copy_numbers = numbers[:]
print(copy_numbers)

输出结果为:

1
2
[1, 2, 3, 4, 5, 6]
[1, 2, 3, 4, 5, 6]

不能直接将整个列表赋给另一个变量,因为列表是引用类型,将导致两个名称都引用同一个列表,而不是将列表的副本赋给新的列表变量。

1
2
3
4
5
numbers = [1, 2, 3, 4, 5, 6]
copy_numbers = numbers
numbers.append(7)
print(numbers)
print(copy_numbers)

输出结果为:

1
2
[1, 2, 3, 4, 5, 6, 7]
[1, 2, 3, 4, 5, 6, 7]# copy_numbers 与 numbers 表示同一个列表

4.5 元组

Python将不能修改的值称为不可变的,而不可变的列表被称为元组

4.5.1 定义元组

元组看起来很像列表,但使用圆括号而非中括号来标识。

1
2
3
dimensions = (200, 50)
print(dimensions[0])
print(dimensions[1])

输出结果为:

1
2
200
50

严格地说,元组是由逗号标识的,圆括号只是让元组看起来更整洁、更清晰。如果要定义只包含一个元素的元组,必须在这个元素后面加上逗号:

1
numbers = (8,)

创建只包含一个元素的元组通常没有意义,但自动生成的元组可能只有一个元素。

4.5.2 遍历元组中的所有值

1
2
3
numbers = (1, 2, 3)
for number in numbers:
print(number)

输出结果为:

1
2
3
1
2
3

4.5.3 修改元组变量

虽然不能修改元组的元素,但可以给存储元组的变量赋值。

1
2
3
4
5
6
numbers = (1, 2, 3)
print(numbers)

new_numbers = (4, 5, 6, 7)
numbers = new_numbers
print(numbers)

输出结果为:

1
2
(1, 2, 3)
(4, 5, 6, 7)

如果需要存储的一组值在程序的整个生命周期内都不变,就可以使用元组。