python - 将嵌套的可迭代对象转换为列表

标签 python list generator iterable

Python 中是否有一种简单的方法(使用 itertools 或其他方式)将嵌套可迭代 f 转换为其相应的列表或元组?我想保存 f 以便可以对其进行多次迭代,这意味着如果 f 的某些嵌套元素是生成器,我就会遇到麻烦。

我将给出一个输入/输出示例。

>>> g = iter(range(2))
>>> my_input = [1, [2, 3], ((4), 5), [6, g]]
>>> magical_function(my_input)
[1, [2, 3], [[4], 5], [6, [0, 1]]]

如果输出也包含元组就好了。问题在于,迭代 g 会“消耗”它,因此无法再次使用它。

最佳答案

这似乎最好通过检查每个元素是否可迭代来完成,如果它是可迭代的,则对其调用递归函数。就像一个快速的草稿一样,我会尝试这样的事情:

import collections

g = iter(range(2))
my_input = [1, [2, 3], ((4), 5), [6, g]]

def unfold(iterable):
    ret = []
    for element in iterable:
        if isinstance(element, collections.Iterable):
            ret.append(unfold(element))
        else:
            ret.append(element)
    return ret

n = unfold(my_input)
print(n)
print(n)

返回

$ python3 so.py
[1, [2, 3], [4, 5], [6, [0, 1]]]
[1, [2, 3], [4, 5], [6, [0, 1]]]

这不是最漂亮的方式,您可以找到改进它的方法(它将所有内容放在列表中而不是保留元组),但这是我会使用的总体想法。

关于python - 将嵌套的可迭代对象转换为列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36726129/

相关文章:

python - 在 Tornado 协程中使用常规 Python 生成器

javascript - 为什么在此示例中使用生成器函数比填充和迭代数组慢?

TypeScript 在 for...of 中拒绝迭代器

python - 使用多处理将 .wav 批量转换为 .flac(Python、Pydub)

python - 绘制来自 Pandas 的某些数据点

python : read a data set file

python - 在空列表上使用 .insert

python - Debian 没有名为 numpy 的模块

java - 在 Java 中将带有列表值的映射转换为列表

python 3 : Reverse consecutive runs in sorted list?