我正在阅读Think Python: How to think like a computer scientist这本书,其中说在Python 3.x中,dict([list of tuples])
返回iterator
而不是list
(如Python 2.7中的情况)。Python中的list和iterator有什么区别?
这本书没有进一步解释它,这让我感到困惑。我特别想知道:
如何是迭代器,并列出不同,和
什么是一个列表返回迭代器的优势在哪里?
我正在阅读Think Python: How to think like a computer scientist这本书,其中说在Python 3.x中,dict([list of tuples])
返回iterator
而不是list
(如Python 2.7中的情况)。Python中的list和iterator有什么区别?
这本书没有进一步解释它,这让我感到困惑。我特别想知道:
如何是迭代器,并列出不同,和
什么是一个列表返回迭代器的优势在哪里?
迭代器是您可以使用for
迭代列表或其他一组对象/值的机制。一个列表实现了一个迭代器。但是你也可以实现返回数字序列,随机串等的迭代器。
当你返回一个迭代器时,你只是返回迭代对象;接收代码不知道底层容器或生成器算法的任何内容。
迭代器很懒;当被要求时,它们只返回序列或列表中的下一个元素。因此你可以用它们实现无限序列。
列表是一个子集的所有迭代的对象,你可以不在名单可迭代的对象。
列表是* iterables *,不是迭代器。 – 2014-09-03 21:36:00
迭代器是一个产生值的对象,但不一定与包含所有要生成的值的内存数据结构关联。相比之下,清单是完全构建和驻留在记忆中的。基本上,迭代器通常具有更高的内存效率,并且通常比创建为内存结构的相同数据性能更高,因为所有的元素计算都可以在元素被访问而不是前加载时完成,并且所有元素都不会不需要驻留在记忆中。
的关键在这里的定义是:
很多事情是iterables这不是列表,所有的列表都iterables
首先,你的书是错误的(或者你误会了吧):
>>> dict([(1, 2), (3, 4), (5, 6)])
{1: 2, 3: 4, 5: 6}
正如你可以看到,dict([
list of tuples
])
在Python 2.x和3.x中均返回字典。
列表和迭代器之间的根本区别就在于一个列表包含按特定顺序的对象的数量 - 这样你就可以,例如,从中间的某个位置拉他们一出来:
>>> my_list = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> my_list
['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> my_list[3]
'd'
...而迭代器产生一些对象以特定的顺序,往往对动态创建他们的要求:
>>> my_iter = iter(range(1000000000000))
>>> my_iter
<range_iterator object at 0x7fa291c22600>
>>> next(my_iter)
0
>>> next(my_iter)
1
>>> next(my_iter)
2
我使用的是0用于演示目的的;在实际的代码是更常见的迭代器与迭代的for循环:
for x in my_iter:
# do something with x
通知的权衡:一个万亿整数的列表将使用更多的内存比大多数机器都可用,这使得迭代多更高效......在不能够在中间的某个地方要求对象的成本:
>>> my_iter[37104]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'range_iterator' object is not subscriptable
我是Python新手。你如何调用任务产生的对象:“range()”?它是“任务”的正确方式来引用“范围()”? – Stefano 2018-02-27 17:09:42
你应该阅读Python文档的指导迭代器协议这里:https://docs.python.org/2/library/stdtypes.html#iterator-types
基本上,迭代器在Python中是tho se符合通用的来迭代容器中的元素。 A list
是符合该协议的特定容器类型。
列表是保存一系列值的数据结构。迭代器是一个对象,它提供了一个接口,通过next
函数一次检索一个值。
一个可迭代的对象是一个提供__iter__
方法的对象,当您将一个迭代函数传递给iter
函数时会调用该方法。你通常不需要明确地这样做;例如,一个for
循环会隐式执行。像
for x in [1,2,3]:
print x
环路自动调用list
的__iter__
方法。你可以用
for x in iter([1,2,3]):
print x
甚至更明确地这样做明确地
for x in [1,2,3].__iter__():
print x
的一种方式,看看不同的是从单一名单创建迭代器。
l = [1, 2, 3, 4, 5]
i1 = iter(l)
i2 = iter(l)
print next(i1) # 1
print next(i1) # 2
print next(i2) # 1 again; i2 is separate from i1
print l # [1, 2, 3, 4, 5]; l is unaffected by i1 or i2
呃......'dict(...)''返回一个'dict'。在这两个python版本中。你指的是“地图”吗? – roippi 2014-09-03 21:39:32