在上一章,我们学习了如何创建一个列表,以及如何操作列表元素,接下来就让我们一起学习如何利用几行代码去遍历整个列表吧!
第四章:操作列表
一、 遍历整个列表
在一些情况下,我们经常会需要对于列表中的所有元素进行重复性的操作,但如果一个个的去执行代码,就会导致大量重复代码的出现。所以为了更好的去解决这个问题,我们可以使用
Python中的for循环
1. for循环的使用及其原理
下面就通过一些实例去帮助我们理解什么是for循环,以及如何使用for循环吧!
>>> animals = ["dog", "cat", "rabbit"]
for animal in animals:
print(f"A {animal} would make a great pet.")
A dog would make a great pet.
A cat would make a great pet.
A rabbit would make a great pet.
我们发现可以使用
for循环去处理一些重复性的操作,会给我们带来很大的便利。在这个例子中,我们定义一个包含三个元素的列表,然后使用
for循环去遍历列表中的所有元素。其原理为,在第一次循环开始时,把列表
animals中的第一个元素“dog”与变量animal相关联,然后通过变量animal这个桥梁执行下面的输出操作,然后再进行第二次循环,把列表animals中的第二个元素“cat”与变量animal相关联,以此类推。
2. 在for循环中执行更多操作
有时我们需要对循环中的内容进行更多的操作,这时只需要在循环体中加入相应操作就可以了
- 例如,我们想在上一个例子的基础上加入一条信息,说明这种动物适合当宠物的原因,可以对代码进行如下修改
>>> animals = ["dog", "cat", "rabbit"]
for animal in animals:
print(f"A {animal} would make a great pet.")
print(f"Because {animal}s are very cute!\n") ## \n为换行符,在这里起到分隔的作用
A dog would make a great pet.
Because dogs are very cute!
A cat would make a great pet.
Because cats are very cute!
A rabbit would make a great pet.
Because rabbits are very cute!
在这里我们要注意,如果是要对循环体内部进行操作,一定要将操作的代码加入到循环体中,在
Python中,一般使用缩进来判断代码之间的关系,所以这点要格外注意。
3. 在循环结束后执行一些操作
有时我们需要在循环结束后,在结尾处加入一些总结性的语句,这时可以在for循环后面加入一条没有缩进的代码,在Python中,没有缩进的代码只执行一次
- 同理,也拿上一个例子来进行修改,在循环结束后,加入一个总结性的语句,可以对代码进行如下调整:
>>> animals = ["dog", "cat", "rabbit"]
for animal in animals:
print(f"A {animal} would make a great pet.")
print(f"Because {animal}s are very cute!\n")
print("Any of these animals would make a great pet!")
A dog would make a great pet.
Because dogs are very cute!
A cat would make a great pet.
Because cats are very cute!
A rabbit would make a great pet.
Because rabbits are very cute!
Any of these animals would make a great pet!
在Python中,缩进是一个极其重要的格式,所以我们在编写代码时应格外注意。
不要忘记缩进,或未对需要缩进的代码进行缩进,虽然这两种情况都可以正常执行,但往往不是我们想要的结果;
还有种情况就是,我们可能会在一些不需要缩进的地方私自添加一些缩进,这往往会出现报错信息,此类报错信息一般都含有
“indent”这个词,这个词就是缩进的意思;另外还有一个值得注意的地方就是,
for循环语句最后,一定不要遗漏冒号,这个冒号会告诉Python,下一行是循环体的第一行。这些细微的错误在编程时非常容易出现,而且有时还很难发现,所以我们在平时的练习中要尽量养成良好的编程习惯,减少这些细微错误的出现。
二、 创建数值列表
在上一章中我们学习了如何创建一个列表,这里再介绍一些有关于数值列表的简单创建方式。
1. 使用函数range()
函数
range()一般包含两个参数,例如range(a,b)表示一个从a开始,到b结束的一系列数,下面举一个例子:
>>> for num in range(1,6):
print(num)
1
2
3
4
5
在上面这个例子中,
range(1,6)表示从1开始,直到6的一系列数,这里要注意这个列表往往不包含第二个值,所以在编写代码时应格外注意
在使用函数
range()时,如果输出不符合预期,可将指定的值加1或减1使用函数
range()时,也可以只指定一个参数,这样它会默认从0开始,例如range(6)返回0~5
2. 使用函数range()创建数字列表去创建一个数值列表呢
这里首先要提出一点容易误解的地方,在
Python3中,函数range()返回的是一个可迭代对象(类型是对象),所以打印的时候不会打印列表,具体什么是对象,这个我们在后续的学习中会介绍,这里只要明白一点:函数range()返回的不是列表那既然函数
range()返回的不是列表,那我们怎么利用函数range()去创建一个数值列表呢要创建一个数值列表,可使用函数
list()将函数range()的结果转换为列表,下面用一个实例进行演示
>>> numbers = list(range(1,6))
>>> print(numbers)
[1, 2, 3, 4, 5]
使用函数
range()时,还可以指定步长,即函数range()的第三个参数,下面举一个例子进行说明
>>> even_numbers = list(range(2,10,2))
>>> print(even_numbers)
[2, 4, 6, 8]
- 在这个例子中,函数
range()从2开始数,然后不断加2,直到达到或超过终值10(不含终值),因此这里输出的是1~9的所有偶数
小练习:创建一个列表,让其包含1~10这十个整数的平方(Python中乘方用
**表示)
>>> squares = []
>>> for number in range(1,11):
square = number ** 2
squares.append(square) ## 这两步也可整合为一步 squares.append(number**2)
>>> print(squares)
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
3. 对数字列表执行简单的统计运算
Python中有几个专门用于处理数字列表的函数,例如,使用max(),min()和sum()找出数字列表中的最大值,最小值以及总和
>>> digits = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
>>> min(digits)
0
>>> max(digits)
9
>>> sum(digits)
45
4. 列表解析
对于上面的小练习,生成
squares列表的方式包含四五行代码,而列表解析可以只写一行代码,就能起到相同的效果。列表解析将
for循环和创建新元素的代码合并成一行,并自动附加新元素。下面就让我们来看一下如何用一行代码实现相同的效果吧!
>>> squares = [number**2 for number in range(1,11)] ## 列表解析
>>> print(squares)
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
这种语法简单解释下就是,定义一个
squares的变量名,然后对其进行列表赋值(使用中括号[]),赋值内容中,先是定义一个赋值的表达式(如number**2),后面接着一个for循环(for循环语句末尾没有冒号)。要创建一个自己的列表解析,需要经过大量的练习,但当你真正学会了这种写法之后,会给我们带来很大的便利。
三、 使用部分列表
在
Python中,还可以处理列表中的部分元素,被称为切片
1. 切片
要创建切片,就一定会用到索引,可以通过指定使用的第一个元素和最后一个元素的索引来创建切片,与函数range()一样,切片也是取不到最后一个元素的,下面进行举例说明:
>>> fruits = ["apple","banana","grape","orange","pear","strawberry"]
>>> print(fruits[1:5]) ## 返回第二、三、四、五个元素
['banana', 'grape', 'orange', 'pear']
'''如果没有指定第一个索引,则默认从列表表头开始'''
>>> print(fruits[:3]) ## 返回第一、二、三个元素
['apple', 'banana', 'grape']
'''如果没有指定最后一个索引,则默认终止于列表结尾'''
>>> print(fruits[3:]) ## 返回最后三个元素
['orange', 'pear', 'strawberry']
'''同索引一样,切片也可以使用负数索引'''
>>> print(fruits[-4:]) ## 返回最后四个元素
['grape', 'orange', 'pear', 'strawberry']
'''若在切片的方括号内指定第三个值,表示每隔多少元素提取一个'''
>>> print(fruits[0:5:2]) ## 从第一个元素到第第五个元素中,每隔一个元素提取一个
['apple', 'grape', 'pear']
2. 切片的遍历
要遍历切片里的元素,可在for循环中使用切片,如下:
>>> fruits = ["apple","banana","grape","orange","pear","strawberry"]
>>> for fruit in fruits[1:4]:
print(fruit)
banana
grape
orange
3. 复制列表
在对列表进行操作时,我们有时可能会需要对列表进行复制,复制列表可以通过切片来完成,即同时省略起始索引和终止索引(
[:]),示例如下:
>>> my_fruits = ["apple","banana","grape"]
>>> friend_fruits = my_fruits[:]
>>> print("My favorite fruits are:")
>>> print(my_fruits)
>>> print("\nMy friend's favorite fruits are:")
>>> print(friend_fruits)
My favorite fruits are:
['apple', 'banana', 'grape']
My friend's favorite fruits are:
['apple', 'banana', 'grape']
这里可能有同学会说,直接赋值不就行了吗,为什么还那么麻烦,那下面我们就来探讨一下直接赋值可不可以
>>> my_fruits = ["apple","banana","grape"]
>>> friend_fruits = my_fruits
>>> print("My favorite fruits are:")
>>> print(my_fruits)
>>> print("\nMy friend's favorite fruits are:")
>>> print(friend_fruits)
My favorite fruits are:
['apple', 'banana', 'grape']
My friend's favorite fruits are:
['apple', 'banana', 'grape']
'''表面上看好像是可行的,我们再试着分别对这两个列表进行添加元素的操作''
>>> my_fruits.append("orange")
>>> friend_fruits.append("pear")
>>> print("My favorite fruits are:")
>>> print(my_fruits)
>>> print("\nMy friend's favorite fruits are:")
>>> print(friend_fruits)
My favorite fruits are:
['apple', 'banana', 'grape', 'orange', 'pear']
My friend's favorite fruits are:
['apple', 'banana', 'grape', 'orange', 'pear']
## 这里明显就不是我们想要的效果了,所以要想按照我们的想法去复制列表,要使用前面介绍的切片的方法
直接赋值之所以不成功,主要是因为在Python中变量的赋值其实是一个类似于指针指向的过程,所以并没有把它们所分开,才导致了上面的这种情况。最后,建议大家复制完列表后,可以尝试用上例中的方法确认是否按照我们的想法成功复制了列表
四、 元组
在上一章我们学习了对列表元素进行处理,说明列表是可以修改的,但有时我们也需要创建一些不可以修改的列表,在Python中把这种不可修改的列表称为元组
1. 定义元组
元组和列表类似,唯一的区别就是元组使用圆括号而不是中括号
>>> dimensions = (200,50)
>>> print(dimensions)
(200, 50)
>>> print(dimensions[0]) ## 访问元组元素
200
>>> dimensions[0] = 300 ## 尝试修改元组元素的值
Traceback (most recent call last):
File "d:\Microsoft VS Code\code\test.py", line 3, in <module>
dimensions[0] = 300
TypeError: 'tuple' object does not support item assignment
## 出现报错,元组中的值是不能被修改的
>>> for dimension in dimensions: ## 遍历元组中的值
print(dimension)
200
50
注意:严格地说,元组是用逗号标识的,如果要定义一个只包含一个元素的元组,必须在这个元素后面加上逗号:
my_value = (6,),如果不加逗号,则等同于my_value = 6,这就不是一个元组了,而是一个数
2. 修改元组变量
上面说过元组的元素是不能修改的,但我们可以给元组重新赋值。因此,如果要修改元组的值,可以通过重新定义元组的方法
>>> dimensions = (200, 50)
>>> print("Original dimensions:")
>>> for dimension in dimensions:
print(dimension)
Original dimensions:
200
50
>>> dimensions = (400, 100)
>>> print("\nModified dimensions:")
>>> for dimension in dimensions:
print(dimension)
Modified dimensions:
400
100
五、 小结
我们学习了如何高效处理列表中的元素,以及如何使用
for循环遍历列表,切片的使用和元组的概念。下一章中,我们将一起学习Python中的另一大结构:if条件结构。