当前位置: 首页 > 知识库问答 >
问题:

range()真的会创建列表吗?

雷献
2023-03-14

我的教授和这个家伙都声称范围创建了一个值列表。

注意:range函数只返回一个包含从x到y-1的数字的列表。例如,range(5,10)返回列表[5,6,7,8,9]

我认为这是不准确的,因为:

type(range(5, 10))
<class 'range'>

此外,访问由范围创建的整数的唯一明显方法是遍历它们,这使我相信将范围标记为列表是不正确的。

共有3个答案

萧英睿
2023-03-14

如果使用的python版本为2,则范围会创建一个列表。x。在这种情况下,只有在多次引用范围时才使用它,否则使用xrange,它通过reduse内存使用量,有时使用时间,创建一个生成器,因为它有惰性方法。

python 3中没有xrange。x代表python 2的x范围。x个

参考问题Python 2. X中的range和xrange函数有什么区别?

苏乐
2023-03-14

看情况。

python-2. x中,range实际上创建了一个列表(也是一个序列),而xrange创建了一个xrange对象,可用于遍历值。

另一方面,在python-3中。x、 范围创建一个iterable(或更具体地说,一个序列)

殷安顺
2023-03-14

在Python 2中。x、 范围返回一个列表,但在Python 3中。xrange返回类型为range的不可变序列。

Python 2。x:

>>> type(range(10))
<type 'list'>
>>> type(xrange(10))
<type 'xrange'>

Python 3. x:

>>> type(range(10))
<class 'range'>

在Python 2中。x、 如果您想获得一个iterable对象,如Python 3中的对象。x、 您可以使用函数xrange,它返回类型为xrange的不可变序列。

与Python 2中的范围相比,xrange的优势。x:

除了在内存不足的机器上使用非常大的范围或从不使用范围的所有元素(例如循环通常以中断终止时)。

注:

此外,访问由range()创建的整数的唯一明显方法是遍历它们,

不。由于Python 3中的对象是不可变序列,因此它们也支持索引。从功能文档中引用,

范围实现除串联和重复之外的所有公共序列操作

...

范围对象实现集合。美国广播公司。排序ABC,并提供包含测试、元素索引查找、切片和负索引支持等功能。

例如,

>>> range(10, 20)[5]
15
>>> range(10, 20)[2:5]
range(12, 15)
>>> list(range(10, 20)[2:5])
[12, 13, 14]
>>> list(range(10, 20, 2))
[10, 12, 14, 16, 18]
>>> 18 in range(10, 20)
True
>>> 100 in range(10, 20)
False

所有这些都可以通过不可变的范围序列来实现。

最近,我遇到了一个问题,我认为在这里包含它是合适的。考虑这个Python 3. x代码

from itertools import islice
numbers = range(100)
items = list(islice(numbers, 10))
while items:
    items = list(islice(numbers, 10))
    print(items)

人们会期望这段代码将每十个数字打印为一个列表,直到99。但是,它会无限运行。你能解释为什么吗?

解决方案

因为范围返回一个不可变的序列,而不是迭代器对象。因此,每当对范围对象执行islice操作时,它总是从头开始。可以将其视为不可变列表的替代品。现在问题来了,你将如何修复它?很简单,你只需要从中得到一个迭代器。只需将数字=范围(100)
更改为数字=iter(范围(100))现在,数字是一个迭代器对象,它会记住之前迭代了多长时间。因此,当islice迭代它时,它只是从之前结束的地方开始。

 类似资料:
  • 问题内容: 我的教授和这个家伙都声称创造了价值清单。 “注意:范围函数仅返回包含从x到y-1的数字的列表。例如,range(5,10)返回列表[5、6、7、8、9]。” 我认为这是不准确的,因为: 此外,访问由创建的整数的唯一显而易见的方法是遍历它们,这使我认为标记为列表是不正确的。 问题答案: 在Python 2.x中,返回一个列表,但在Python 3.x中,返回一个不可变序列,类型为。 Py

  • 我试图从一个范围创建一个列表,但当我将它粘贴到另一个列表中时,我得到的是一个类,而不是我期望的列表- 代码: 这输出<代码>范围(0,3),

  • Range 创建一个发射特定整数序列的Observable Range操作符发射一个范围内的有序整数序列,你可以指定范围的起始和长度。 RxJava将这个操作符实现为range函数,它接受两个参数,一个是范围的起始值,一个是范围的数据的数目。如果你将第二个参数设为0,将导致Observable不发射任何数据(如果设置为负数,会抛异常)。 range默认不在任何特定的调度器上执行。有一个变体可以通过

  • 问题内容: 在应使用相同的列表时,我看到一些不一致之处。(Python 2.7.5) 有人有一个简单的解释吗? 问题答案: 使用列表文字,VM会创建具有设置长度的列表。当将序列传递给构造函数时,元素将被一个接一个地添加(通过),因此在适当时调整了列表的大小。由于调整大小操作是为了分摊成本而进行的,因此最终列表通常会比源列表大。

  • 问题内容: 我正在创建一个单元测试来尝试我刚刚创建的servlet。 以下行生成一个NullPointerException: 有什么我想念的吗? 问题答案: 很抱歉这个愚蠢的问题,只需添加utf-8格式即可解决。 创建一个没有经过格式将使用这 哪个让我感到困惑…是什么导致它抛出?

  • 问题内容: 与列表变平相反。 给定一个列表和一个长度为n的列表,返回一个长度为n的子列表的列表。 一个例子: 如果列表是: n是: 返回: 有没有一种更雄辩/简洁的方法? 顺便说一句,将列表追加到列表时(在上面的上下文中)是首选: 要么: 鉴于(根据Summerfeild的“ Python 3编程”),它们是一样的吗? 谢谢。 问题答案: 这样的列表列表可以使用列表理解来构造: 还有石斑鱼成语: