Python 范围函数不打印数字列表

Python 范围函数不打印数字列表,python,python-3.x,Python,Python 3.x,我想打印一个从1到1000的奇数列表 x = range(1, 1000, 2) print (x) 上面的代码打印:范围(1、1000、2)。然而,当我使用for循环时,它工作得很好 有人能解释一下原因吗?这是一个范围对象。如果您想要一个编号为1到1000的列表,其中包含2个步骤,您可以这样做: list(range(1, 1000, 2)) 如果不想更改列表中的值,使用tuple是更好的选择: tuple(range(1, 1000, 2)) 范围对象与列表不同。它实际上并不包含从1到

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

x = range(1, 1000, 2)
print (x)
上面的代码打印:
范围(1、1000、2)
。然而,当我使用for循环时,它工作得很好


有人能解释一下原因吗?

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

list(range(1, 1000, 2))
如果不想更改列表中的值,使用
tuple
是更好的选择:

tuple(range(1, 1000, 2))
范围对象与列表不同。它实际上并不包含从1到1000的数字。当您在
for
循环中使用它时,它会在循环中生成数字

例如,如果你创建一个从1到1000的范围,它不会占用很多内存;但是当你把它转换成一个列表时,所有的实际数字都会存储在内存中

在Python2中,range将返回一个列表,但在Python3中,range是range类型的不可变序列。正如python文档中所述:

与常规列表或元组相比,范围类型的优势在于,范围对象始终会占用相同(较小)的内存量,而不管它所表示的范围大小(因为它只存储开始、停止和步长值,根据需要计算单个项和子范围)


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

x是一个
范围对象
请尝试此代码

x=list(范围(1,1000,2))
打印(x)
试试看

>>> 
>>> x = range(1, 10, 2)
>>> 
>>> print (type(x))
<class 'range'>
>>> 
>>> print(list(x))
[1, 3, 5, 7, 9]
>>> 
>>> 
>
>>>x=范围(1、10、2)
>>> 
>>>打印(类型(x))
>>> 
>>>打印(列表(x))
[1, 3, 5, 7, 9]
>>> 
>>> 

在Python3.x中,range返回对象,而在Python2.x中,它默认返回列表。

这是因为
x
range
对象,而不是
list
。您可以将其转换为:
x=list(范围(1,1000,2))
您是否试图从涵盖Python 2的源代码学习Python?在Python 2中,
range
确实返回了一个列表。您应该注意到,Python 2的所有版本都已经过,并且将不再接受维护或安全更新<代码>范围。如果参数是
切片
对象,则返回
范围
;否则它将返回一个
int
@chepner您是对的。如果索引选择了
范围
的单个元素,它将返回该整数。范围(10)[2]==2