从迭代器创建容器

时间:2012-12-15 02:39:24

标签: python python-3.x

我想从迭代器创建setlist等。不幸的是,它们的构造函数需要迭代而不是迭代器。我不想创建一个很快就会被丢弃的迭代。

当然,我可以简单地使用列表或设置理解,这可以完全符合我的要求(以及更多)。但是,它们的语法是特殊的。所以当我尝试写一个函数时:

def create_from_gen(container_type, generator):
  return container_type(generator)

我卡住了。对于用户定义的容器,我当然可以定义自己的构造函数;对于图书馆和内置类型我别无选择。我可以检查listset,并使用我想的特殊语法,但这很难看。

2 个答案:

答案 0 :(得分:4)

迭代器也是一个可迭代的对象。它应始终具有返回自身的__iter__方法。这是Python中the specification for iterators的一部分。

所以只需将迭代器传递给listset构造函数,它应该可以正常工作。

答案 1 :(得分:3)

所有迭代器都是可迭代的。 " iterable"的定义是可以从它创建一个迭代器。

>>> list(iter((1, 2, 3)))
[1, 2, 3]