创建数值列表

存储一组数字的原因有很多。 例如,您需要跟踪游戏中每个角色的位置,并且您可能还想跟踪玩家的高分。 在数据可视化中,您几乎总是会使用数字集,例如温度、距离、人口规模或纬度和经度值,以及其他类型的数字集。 列表是存储数字集的理想选择,Python 提供了多种工具来帮助您高效地处理数字列表。 一旦您了解了如何有效地使用这些工具,即使您的列表包含数百万个项目,您的代码也能正常工作。

使用range()函数

Python 的 range() 函数可以轻松生成一系列数字。 例如,您可以使用 range() 函数来打印一系列数字,如下所示:

for value in range(1, 5):
    print(value)

虽然这段代码看起来应该打印从 1 到 5 的数字,但它并没有打印数字 5:

1
2
3
4

在此示例中,range() 仅打印数字 1 到 4。这是您在编程语言中经常看到的偏离1行为的另一个结果。 range() 函数使 Python 从您提供的第一个值开始计数,并在达到您提供的第二个值时停止。 因为它在第二个值处停止,所以输出永远不会包含最终值,在本例中为 5。

要打印从 1 到 5 的数字,您可以使用 range(1, 6):

for value in range(1, 6):
    print(value)

这次输出从 1 开始到 5 结束:

1
2
3
4
5

如果您的输出与您在使用 range() 时的预期不同,请尝试将最终值调整加 1。

您也可以只传递 range() 一个参数,它将从 0 开始数字序列。例如 , range(6) 将返回从 0 到 5 的数字。

使用 range() 创建数值列表

如果要制作数字列表,可以使用 list() 函数将 range() 的结果直接转换为列表。 当您将 list() 包含在对 range() 函数的调用中时,输出将是一个数字列表。 在上一节的示例中,我们只是简单地打印了一系列数字。 我们可以使用 list() 将同一组数字转换为列表:

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

这是结果:

[1, 2, 3, 4, 5]

我们还可以使用 range() 函数告诉 Python 跳过给定范围内的数字。 如果将第三个参数传递给 range(),Python 会在生成数字时使用该值作为步长。

例如,下面是如何列出 1 到 10 之间的偶数:

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

在此示例中,range() 函数以值 2 开始,然后将 2 添加到该值。 它重复加 2,直到达到或超过最终值 11,并产生以下结果:

[2, 4, 6, 8, 10]

您可以使用 range() 函数创建几乎任何您想要的数字集。 例如,考虑如何列出前 10 个平方数(即从 1 到 10 的每个整数的平方)。 在 Python 中,两个星号 (**) 代表指数。 以下是将前 10 个平方数放入列表的方法:

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

print(squares)
1 我们从一个名为 squares 的空列表开始。 然后,我们告诉 Python 使用 range() 函数循环遍历从 1 到 10 的每个值。 在循环内部,当前值的二次方赋值给变量 square。
2 然后将 square 的每个新值附加到列表 squares 。 最后,当循环结束运行时,打印方块列表:
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

为了更简洁地编写此代码,省略临时变量 square 并将每个新值直接附加到列表中:

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

print(squares)

此行与前面清单中 for 循环内的行执行相同的工作。 循环中的每个值都被提高到二次方,然后立即附加到方块列表中。

当您制作更复杂的列表时,您可以使用这些方法中的任何一种。 有时使用临时变量会使您的代码更易于阅读; 其他时候,它会使代码变得不必要地长。 首先专注于编写您清楚理解的代码,并按照您的意愿进行操作。 然后在检查代码时寻找更有效的方法。

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

一些 Python 函数在处理数字列表时很有用。 例如,您可以轻松找到数字列表的最小值、最大值和总和:

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

本节中的示例使用很容易适合页面的简短数字列表。 如果您的列表包含一百万或更多数字,它们也会同样有效。

列表推导式

前面描述的用于生成列表方块的方法使用三行或四行代码。 列表理解允许您仅用一行代码生成相同的列表。 列表推导将 for 循环和新元素的创建结合到一行中,并自动附加每个新元素。 列表推导并不总是呈现给初学者,但我将它们包含在这里是因为您很可能在开始查看其他人的代码时立即看到它们。

以下示例构建了与您之前看到的相同的平方数列表,但使用了列表推导式:

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

要使用此语法,请以列表的描述性名称开头,例如正方形。 接下来,打开一组方括号并为要存储在新列表中的值定义表达式。 在此示例中,表达式是 value**2,它将值提高到二次方。 然后,编写一个 for 循环以生成要输入表达式的数字,并关闭方括号。 此示例中的 for 循环是 for value in range(1, 11),它将值 1 到 10 提供给表达式 value**2 。 请注意,for 语句末尾没有使用冒号。 结果与您之前看到的相同的平方数列表:

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

编写自己的列表推导式需要练习,但是一旦您习惯于创建普通列表,就会发现它们是值得的。 当您正在编写三四行代码来生成列表并且开始感到重复时,请考虑编写您自己的列表推导式。

自己试试
4-3.Counting to Twenty

使用 for 循环打印从 1 到 20 的数字,包括 1 到 20。

4-4.One Million

列出从一到一百万的数字,然后使用 for 循环打印数字。 (如果输出时间太长,按 CTRL-C 或关闭输出窗口停止输出。)

4-5.Summing a Million

列出从一到一百万的数字,然后使用 min() 和 max() 确保您的列表实际从一开始并以一百万结束。 此外,使用 sum() 函数来查看 Python 可以多快地添加一百万个数字。

4-6.Odd Numbers

使用 range() 函数的第三个参数来制作从 1 到 20 的奇数列表。使用 for 循环打印每个数字。

4-7.Thress

列出 3 的倍数,从 3 到 30。使用 for 循环打印列表中的数字。

4-8.Cubes

一个数的三次方称为立方。 比如 2 的立方在 Python 中写成 2**3 。 列出前 10 个立方体(即从 1 到 10 的每个整数的立方体),并使用 for 循环打印出每个立方体的值。

4-9.Cube Comprehension

使用列表理解生成前 10 个多维数据集的列表。