Python 3系列Vs Python 2系列

时间:2017-06-15 15:42:05

标签: python list range

我最近开始学习python 3.
python 2 range()函数中可以用来分配列表元素。

>>> A = []
>>> A = range(0,6)
>>> print A
[0, 1, 2, 3, 4, 5]

python 3 中,当使用range()函数时,这种情况正在发生

>>> A = []
>>> A = range(0,6)
>>> print(A)
range(0, 6)

为什么会发生这种情况? 为什么python会做这个改变? 这是恩惠还是祸根?

4 个答案:

答案 0 :(得分:18)

Python 3 使用 iterators 来处理很多 python 2 list 的事情。{{3提供详细解释,包括对range的更改。

优点是,如果您使用大范围迭代器或映射, Python 3 不需要分配内存。 例如

for i in range(1000000000): print(i)

在python 3中需要更少的内存。 如果您确实希望Python能够立即扩展列表,那么

list_of_range = list(range(10))

答案 1 :(得分:3)

在python 2中,range是一个内置函数。以下是the official python docs。它返回一个列表。

  

<强>范围(停止)
  范围(开始,停止[,步骤])
  这是一个用于创建包含算术进度的列表的通用函数。它最常用于for循环。

你也可以检查xrange仅存在于python 2中。它返回xrange个对象,主要用于快速迭代。

  

<强> x范围(停止)
   xrange (开始,停止[,步骤])
  此函数与range()非常相似,但返回xrange对象而不是列表。

顺便说一句,python 3将这两个数据合并为一个range数据类型,在python 2中以xrange的类似方式工作。检查the docs

答案 2 :(得分:1)

Python 3 , Scheduler.async));函数等效于python 2 range()函数而不是xrange()

解释

在python 3中,为了节省内存,大多数函数都返回Iterable对象而不是python 2中的列表。其中一些是range() zip() filter(),包括。map()字典方法 但是,如果您尝试迭代几次,那么可迭代对象效率不高,因此您仍然可以使用keys .values .items()方法将它们转换为列表

答案 3 :(得分:-1)

在python3中,执行

A = range(0,6)
A = list(A)
print(A)

您将获得相同的结果。