第4章 列表简介

发布于 2022-03-03  415 次阅读


遍历整个列表

4.1 遍历整个列表

如要进行遍历整个列表并且做相同操作。
例如:游戏中,可能需要将每个界面元素平移相同的距离;对于包含数字的列表,可能要对每个元素执行相同的统计运算;在网站中,可能需要显示文章列表中的每个标题。
for循环。

# for1.py
names = ['GuoAn','xiaoan','xiaoz','yy']
for name in names
    print(name)

file

让Python从列表magicians中取出一个名字,并将其与变量magician相关联。

4.1.1 深入研究循环

Python 将首先读取其中第一行代码:

for name in names:

这行代码让Python获取names中的第一个值, 并且将其与name相关联,接下来,Python读取下一行代码:

print(name)

因为列表还有其他值,Python返回到循环的第一行:

for name in names:

获取下一个值。。依次。。
直到列表中的值取完了。程序结束。
另外,编写for循环时,可以给依次与列表中每个值相关联的临时变量指定任意名称。例如:

for cat in cats:
for dog in dogs:
for item in list_of_items:

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

magicians = ['Xiaoan','xiaob','xiaoan7z']
for magician in magicians:
    print(f"{magician.title()},that was a great trick!")

file

for后面每行缩进的代码都是循环的一部分,可以包含多少行都可以。

magicians = ['Xiaoan','xiaob','xiaoan7z']
for magician in magicians:
    print(f"{magician.title()},that was a great trick!")
    print(f"I want see you {magician}")

file

使用for循环对每个元素执行众多不同的操作很有用

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

magicians = ['Xiaoan','xiaob','xiaoan7z']
for magician in magicians:
    print(f"{magician.title()},that was a great trick!")
    print(f"I want see you {magician}")
print("Thank you!")

例如:你可能使用for循环来初始化游戏;遍历角色列表,将每个角色显示到屏幕上。然后在循环后面添加一个不缩进的代码块,在屏幕上绘制所有角色后显示一个Play Now按钮。

4.2 避免缩进错误

Python根据缩进来判断代码行与前一个代码行的关系。

4.2.1 忘记缩进

file

4.2.2 忘记缩进额外的代码行

如若是for语句中的都要缩进。忘记会导致逻辑错误。

4.2.3 不必要的缩进

file

4.2.4 循环后不必要的缩进

循环后的语句(不需要进for的)错误缩进

4.2.5 遗漏了冒号

导致语法错误。

4.3 创建数值列表

需要存储一组数的原因很多,例如,在游戏中,需要跟踪每个角色的位置,还可需要跟踪玩家的几个最高得分;在数据可视化中,处理的几乎都是由数组成的集合。
列表非常适合用于存储数字集合。

4.3.1 使用函数range()

Python函数range()可以轻松生成一些列数。

# first_numbers.py
for value in range(1,5)
    print(value)

file
生成左闭右开范围数字。

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

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

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

file

range()函数还可以指定步长,第三个参数。

# even_numbers.py
even_numbers = list(range(2,11,2))
print(even_numbers)

file

使用range()几乎能够创建任何需要的数集,

# squares.py
squares = []
for value in range(1,11):
    square = value **2
    squares.append(square)
print(squares)

file

squares = []
for value in range(1,11):
    squares.append(value**2)
print(squares)

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

有几个专门用于处理数字列表的Python函数。例如:

>>> digits = [1,2,3,4,5,6,7,8,9,0]
>>> min(digits)
0
>>> max(digits)
9
>>> sum(digits)
45

同样适用于包含数百万个数的列表。

4.3.4 列表解析

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

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

4.4 使用列表的一部分

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

4.4.1 切片

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

players = ['Guoan','Guox','GUOZ','YY']
print(player[0:3])

file
如果没有指定第一个索引,Python将自动从列表头开始

...
print(players[:4])

要让切片终止于列表末尾,也可使用类似的语法。

...
print(players[2:])

无论列表多长,这种语法都能让你输出从特定位置到末尾的所有元素。
例如:输出最后3个元素 players[-3:] 注意:可在表示切片的方括号内指定第三个值。这个值告诉Python在指定范围内每隔多少元素提取一个。

4.4.2 遍历切片

如果要遍历列表的部分元素,可以在for循环中使用切片。

players = ['Guoan','Guoax','GUASD','YY']
print(players[0:3])
print("Three")
for player in players[0:3]:
    print(player)

file

用处:游戏中统计玩家分数,列出最高三位。Web来切片,来显示指定数量的信息。。

4.4.3 复制列表

经常要根据既有列表全新的列表。复制列表的工作原理,以及复制列表可提供极大帮助的一种情形。
要复制列表,可创建一个包含整个列表的切片。( [:])
需要在原有基础上再添加一个:

my_foods = ['one','two','three']
friend_foods = my_foods[:]

my_foods = ['one','two','three']
friend_foods = my_foods;

则相当于引用。

4.5 元组

列表非常适合用于存储在程序运行期间可能变化的数据集。列表是可以修改的,这对处理网站的用户列表或游戏中的角色列表至关重要。
然而,有时候,需要创建一系列不可修改的元素,元组可以满足这种需求,Python将不能修改的值称为不可变的,而不可变的列表被称为元组。

4.5.1 定义元组

元组看起来很像列表,但使用圆阔靠而非中括号来标识。定义元组后,就可以使用索引来访问其元素,就像访问列表元素一样。
例如,如果有一个大小不应该改变的矩阵,可将其长度和宽度储存在一个元组中。从而确保它们是不能修改的。

# dimensions.py
dimensions = (200,50)
print(dimensions[0])
print(dimensions[1])

file
变成圆括号,访问方式和列表一样。
如果尝试修改其中一个元素。

...
dimensions[0] = 250

file
注意:严格的来说,元组是由逗号标识的,圆括号只是让元组看起来更整洁、更清晰。如果要定义一个元素的元组,必须在这个元素后面加上逗号:
my_t = (3,)
创建只包含一个元素的元组通常没有意义,但自动生成的元组有可能只有一个元素。

4.5.2 遍历元组中的所有值

使用for

dimensions = (200,50)
for dimension in dimensions:
    print(dimension)

file

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)

file

相比于列表,元组是更简单的数据结构。如果需要存储一组值在程序整个生命周期内部都不变,就可以使用元组。

4.6 设置代码格式

4.6.1 格式设置指南

PEB

4.6.2 缩进

PEB8建议每级缩进都用4格空格

4.6.3 行长

每行不超过80字符

4.6.4 空行

要将程序的不同部分分开,可使用空行。
空行不会影响代码的运行,但是会影响代码的可读性。

4.6.5 其他格式设置指南

PEB8 - Style Guide for Python Code
https://www.python.org/dev/peps/pep-0008/

4.7 小结

如何高效地处理列表中的元素;如何使用for循环遍历列表,Python如何根据缩进来确定程序的结构。。。
如何创建简单的数字列表,以及可对数字列表指向的一些操作;如何通过切片来使用一部分和复制列表。
元组。


擦肩而过的概率