【问题标题】:Range function does not print list of numbers [closed]范围函数不打印数字列表[关闭]
【发布时间】:2021-08-06 02:52:58
【问题描述】:

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

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

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

谁能解释一下原因?

【问题讨论】:

  • 这是因为xrange 对象,而不是list。你可以转换它:x = list(range(1, 1000, 2))
  • 您是否正在尝试从涵盖 Python 2 的资源中学习 Python?在 Python 2 中,range 确实返回了一个列表。请注意,Python 2 的所有版本都已为officially deprecated since January 2020,并且将不再接受维护或安全更新。
  • 文档:range
  • 这能回答你的问题吗? Python 3 turn range to a list

标签: python python-3.x


【解决方案1】:

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

list(range(1, 1000, 2))

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

tuple(range(1, 1000, 2))

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

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

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

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

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

【讨论】:

  • range.__getitem__ 如果其参数是slice 对象,则返回range;否则返回一个int
  • @chepner 你是对的。如果range 的单个元素被索引选中,它将返回该整数。范围(10)[2] == 2
【解决方案2】:

试试看。

>>> 
>>> x = range(1, 10, 2)
>>> 
>>> print (type(x))
<class 'range'>
>>> 
>>> print(list(x))
[1, 3, 5, 7, 9]
>>> 
>>> 

在 python 3.x 中范围返回对象,而在 python 2.x 中它默认返回列表。

【讨论】:

    【解决方案3】:

    x 是一个range 对象。
    试试这个代码

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

    【讨论】:

      猜你喜欢
      • 2011-07-20
      • 1970-01-01
      • 2020-02-19
      • 1970-01-01
      • 1970-01-01
      • 2020-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多