首页 > 解决方案 > 范围函数不打印数字列表

问题描述

我想打印一个从 1 到 1000 的奇数列表。

x = range(1, 1000, 2)
print (x)

上面的代码打印:range(1, 1000, 2). 但是,当我使用 for 循环时,它可以正常工作。

谁能解释为什么?

标签: pythonpython-3.x

解决方案


这是一个range对象。如果您想要一个编号为 1 到 1000 的列表,其中包含 2 作为步骤,您可以这样做:

list(range(1, 1000, 2))

如果您不想更改列表中的值,使用tuple是更好的选择:

tuple(range(1, 1000, 2))

Range 对象不同于列表。它实际上并不包含从 1 到 1000 的数字。当您在循环中使用它时,它会在for循环时生成数字。

例如,如果您创建一个从一到千的范围,它不会占用大量内存;但是当您将其转换为列表时,所有实际数字都将存储在内存中。

在 Python 2 中,范围将返回一个列表,但在 Python 3 中,范围是一个不可变的范围类型序列。如python文档中所述:

范围类型相对于常规列表或元组的优点是范围对象将始终占用相同(少量)内存,无论它表示的范围大小(因为它只存储开始、停止和步长值,根据需要计算单个项目和子范围)。

但这并不意味着您不能对范围对象使用索引。由于它们是不可变的序列,因此您可以像列表一样对它们应用索引。返回值也将是一个范围对象(除非它没有被切片并且它只选择一个元素,那么它将将该数字返回为int)。


推荐阅读