Skip to main content
 首页 » 编程设计

python之返回生成器或迭代器生成的所有元素的标准方法

2025年05月04日10sxdcgaq8080

我正在寻找一种简洁的、理想的基于标准库的方法或方法,用于将迭代器或生成器对象转换为包含迭代此对象时将获得的所有元素的列表。如果有任何关于 Python 2.7 或 3.x 的不同解决方案,我也很想知道。基本上,我正在寻找功能上等同于:

def expand(obj): 
    result = [] 
    for o in obj: 
        result.append(o) 
    return result 

我知道 Python 中的生成器和迭代器有很多好处,这可能不应该在 .py 文件中使用。但是,我确实认为这有它的用处,尤其是在交互式编程和使用小型数据集进行测试时。

到目前为止,我最好的答案是列表理解:

In [55]: a=[1,2,3] 
In [56]: r=reversed(a) 
In [57]: r 
Out[57]: <listreverseiterator at 0x101f51a10> 
 
In [58]: [x for x in r] 
Out[58]: [3, 2, 1] 
 
In [59]: def f(x): 
   ....:     while x > 0: 
   ....:         x-=1 
   ....:         yield x 
   ....:          
 
In [60]: [x for x in f(4)] 
Out[60]: [3, 2, 1, 0] 

我尝试在 Google 和 StackOverflow 上进行搜索,但没有发现任何明显的问题,而且我已经检查了 itertools和 functools文档 - 我基于这些尝试的大部分尝试只会产生更多对象。我也快速浏览了 IPython magicks , 但没有注意到那里有任何明显的东西。

请您参考如下方法:

有一个非常简单的解决方案:list(the_iterator)