在本章中,你将学习:如何高效地处理列表中的元素;如何使用for循环遍历列表,Python 如何根据缩进来确定程序的结构以及如何避免一些常见的缩进错误;如何创建简单的数字列表, 以及可对数字列表执行的一些操作;如何通过切片来使用列表的一部分和复制列表。你还会学习 元组(它对不应变化的值提供了一定程度的保护)。
4.1 遍历整个列表
list = ['苹果','香蕉','橘子'] for fruit in list: print(fruit)
终端显示:
>>> 苹果 香蕉 橘子
4.2 避免缩进错误
常见缩进错误:
4.2.1 忘记缩进
IndentationError: expected an indented block
4.2.2 忘记缩进额外的代码行
一般情况下属于逻辑错误。从语法上看,这些Python代码是合法的,但由于存在逻辑错误,结果并 不符合预期。如果你预期某项操作将针对每个列表元素都执行一次,但它却只执行了一次,请确定是否需要将一行或多行代码缩进。
4.2.3 不必要的缩进
IndentationError: unexpected indent
4.2.4 循环后不必要的缩进
如果你不小心缩进了应在循环结束后执行的代码,这些代码将针对每个列表元素重复执行。 在有些情况下,这可能导致Python报告语法错误,但在大多数情况下,这只会导致逻辑错误。
4.2.5 遗漏了冒号
这种错误虽然易于消除,但并不那么容易发现。程序员为找出这样的单字符错误,花费的时间多得 令人惊讶。这样的错误之所以难以发现,是因为通常在我们的意料之外。
4.3 创建数值列表
4.3.1 使用函数 range()
取值原则:取左不取右,也就是数学上的左闭右开区间。
for value in range(1,5): print(value) >>> 1 2 3 4
4.3.2 使用 range()创建数字列表
num = list(range(1,4)) print(numbers) >>> [1, 2, 3]
使用函数range()时,还可指定步长。例如,下面的代码打印1~10内的偶数:
num = list(range(2,11,2)) print(even_numbers) >>> [2, 4, 6, 8, 10]
在Python中,两个星号(**)表示乘方运算。下面的代码演示了 如何将前10个整数的平方加入到一个列表中:
list = [] for value in range(1,11): list.append(value**2) print(list) >>> [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
4.3.3 对数字列表执行简单的统计计算
list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] min(list) 0 max(list) 9 sum(digits) 45
4.3.4 列表解析
list = [value for value in range(1,11)]
要使用这种语法,首先指定一个描述性的列表名,如list;然后,指定一个左方括号, 并定义一个表达式,用于生成你要存储到列表中的值。在这个示例中,表达式为value**2,它计 算平方值。接下来,编写一个for循环,用于给表达式提供值,再加上右方括号。在这个示例中, for循环为for value in range(1,11),它将值1~10提供给表达式value**2。
请注意,这里的for 语句末尾没有冒号。
4.4 使用列表的一部分
4.4.1 切片
4.4.2 遍历切片
list = [value**3 for value in range(1,11)] #打印前两位数 print('The first two items in the list are') for value in list[:2]: print(value) #打印中间三位数 print('Three items from middle list are.') for item in list[4:7]: print(item) #打印后四位数 print('The last four items from middle list are.') for items in list[-4:]: print(items) >>> The first two items in the list are 1 8 216 343 The last four items from middle list are. 1 8 27 64 125 216
4.4.3 复制列表
要复制列表,可创建一个包含整个列表的切片,方法是同时省略起始索引和终止索引([:])。
list = ['苹果','香蕉','橘子'] copy_list = list[:] ① list.append('梨') copy_list.append('柚子') print(list) print(copy_list) >>> ['苹果', '香蕉', '橘子', '梨'] ['苹果', '香蕉', '橘子', '柚子']
之所以在①处没有直接用 copy_list = list,是因为那只是简单地将 my_foods赋给friend_foods,就不能得到两个列表。
list = ['苹果','香蕉','橘子'] copy_list = list list.append('梨') copy_list.append('柚子') print(list) print(copy_list) >>> ['苹果', '香蕉', '橘子', '梨','柚子'] ['苹果', '香蕉', '橘子', '梨','柚子']
这种语法实际上是让Python将新变量copy_list关联到包含在list中的列表,因此这两个变量都指向同一个列表。鉴于此,当我们'梨'添加到list中时,它也将出现在copy_list中;同样,虽然'柚子'好像只被加入到了copy_list中,但它也将出现在这 两个列表中。
4.5 元组
列表非常适合用于存储在程序运行期间可能变化的数据集。列表是可以修改的,这对处理网 站的用户列表或游戏中的角色列表至关重要。然而,有时候你需要创建一系列不可修改的元素, 元组可以满足这种需求。Python将不能修改的值称为不可变的,而不可变的列表被称为元组。
4.5.1 定义元组
tuple = ('刀削面','炸酱面','热干面')
4.5.2 遍历元组中的所有值
tuple = ('刀削面','炸酱面','热干面') for food in tuple: print(food) >>> 刀削面 炸酱面 热干面
4.5.3 修改元组变量
虽然不能修改元组的元素,但可以给存储元组的变量赋值。因此,如果要修改前述矩形的尺 寸,可重新定义整个元组:
dimensions = (200, 50) print("Original dimensions:") for dimension in dimensions: print(dimension) dimensions = (400, 100) print("\nModified dimensions:") for dimension in dimensions: print(dimension) >>> Original dimensions: 200 50 Modified dimensions: 400 100