当前位置: 首页 > 面试题库 >

“ range(0,2)”和“ list(range(0,2))”之间有什么区别?

上官培
2023-03-14
问题内容

需要了解的区别range(0,2)list(range(0,2))使用python2.7

两者都返回一个列表,那么到底有什么区别?


问题答案:

在Python 3.x中,

range(0,3)返回一类不可变的可迭代对象,它使您可以对其进行迭代,它不生成列表,并且它们不将范围内的所有元素存储在内存中,而是在运行时生成元素(当您对其进行迭代时)
,而list(range(0,3))产生一个列表(通过遍历所有元素并在内部追加到列表中)。

范例-

>>> range(0,3)
range(0, 3)
>>> list(range(0,3))
[0, 1, 2]

理想情况下,如果只想遍历该值的范围,range(0,3)则速度会更快,(list(range(0,3))因为后者在开始遍历之前有产生列表的开销。

在Python 2.x中,range(0,3)产生一个列表,相反,我们还有一个xrange()函数,其行为range()与Python
3.x类似(xrange在Python 3.x中被重命名为range)。

对于Python 3.5,从文档中-

范围对象实现collections.abc.Sequence ABC,并提供诸如包含测试,元素索引查找,切片和对负索引的支持等功能

因此,您可以执行以下操作-

>>> range(0,10)[5]
5
>>> range(0,10)[3:7]
range(3, 7)
>>> 5 in range(6,10)
False
>>> 7 in range(1,8)
True

从测试中可以看出,所有这些都是固定时间的操作-

In [11]: %timeit a = xrange(0,1000000)[1000]
1000000 loops, best of 3: 342 ns per loop

In [12]: %timeit a = xrange(0,1000000)[10000]
1000000 loops, best of 3: 342 ns per loop

In [13]: %timeit a = xrange(0,1000000)[100000]
1000000 loops, best of 3: 342 ns per loop

In [14]: %timeit a = xrange(0,1000000)[999999]
1000000 loops, best of 3: 342 ns per loop

In [15]: %timeit a = xrange(0,10000000)[9999999]
1000000 loops, best of 3: 339 ns per loop

In [16]: %timeit a = xrange(0,1000000000000)[9999999999]
1000000 loops, best of 3: 341 ns per loop


 类似资料:
  • 两者都返回一个列表,那么到底有什么区别呢?

  • 问题内容: 显然xrange更快,但我不知道为什么它更快(到目前为止,除了轶事之外还没有证据表明它更快)或除此之外还有什么不同 问题答案: 在Python 2.x中: 创建一个列表,所以如果你这样做,则会在内存中创建一个包含9999999元素的列表。 是一个延迟计算的序列对象。 在Python 3中,它等效于,并且必须使用来获取列表。

  • 问题内容: 我想知道和之间有什么区别。我知道最后一个是常规的ID分配,但第一个看起来不同。有什么特别之处? 我在哪里看到的: 我正在研究ListView,ListAdapter之类的东西,作者在布局xml文件中定义了ListView,如下所示: 我也要提一下id 他还扩大了课堂。 这是文章的出处。 还有我在想什么问题: 我们应该扩展吗?也许我想要一个还包含其他视图的活动。 我们只是因为扩展而使用,

  • 本文向大家介绍xrange和range的区别相关面试题,主要包含被问及xrange和range的区别时的应答技巧和注意事项,需要的朋友参考一下 都在循环时使用,xrange内存性能更好,xrange用法与range完全相同,range一个生成list对象,xrange是生成器 要生成很大的数字序列的时候,用xrange会比range性能优很多,因为不需要一上来就开辟一块很大的内存空间。 在pyth

  • 问题内容: 在此示例中: 无法编译为: 而被编译器接受。 这个答案说明唯一的区别是,与不同,它允许您稍后引用类型,似乎并非如此。 是什么区别,并在这种情况下,为什么不第一编译? 问题答案: 通过使用以下签名定义方法: 并像这样调用它: 在jls§8.1.2中,我们发现(有趣的部分被我加粗了): 通用类声明定义了一组参数化类型(第4.5节), 每种可能通过类型arguments调用类型参数节的类型

  • 问题内容: 以下代码之间有什么区别: 和 Python建议采用一种做事方式,但有时似乎不止一种。 问题答案: 一个是函数调用,一个是文字: 使用第二种形式。它更具Python风格,并且可能更快(因为它不涉及加载和调用单独的函数)。