我正在寻找一种简洁的、理想的基于标准库的方法或配方,用于将迭代器或生成器对象转换为包含迭代该对象时将获得的所有元素的列表。如果关于 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,但没有注意到那里有任何明显的东西。