小编una*_*owa的帖子

如何将生成器或迭代器转换为递归列表

我想将生成器或迭代器转换为递归列表.
我在下面编写了一个代码,但它看起来很幼稚和丑陋,可能会在doctest中删除.

Q1.帮帮我好版本.
Q2.如何指定对象是不可变的?

import itertools

def isiterable(datum):
    return hasattr(datum, '__iter__')

def issubscriptable(datum):
    return hasattr(datum, "__getitem__")

def eagerlize(obj):
    """ Convert generator or iterator to list recursively.
    return a eagalized object of given obj.
    This works but, whether it return a new object, break given one.

    test 1.0 iterator

    >>> q = itertools.permutations('AB',  2)
    >>> eagerlize(q)
    [('A', 'B'), ('B', 'A')]
    >>>

    test 2.0 generator in list

    >>> q = [(2**x for x in range(3))]
    >>> eagerlize(q)
    [[1, 2, 4]]
    >>>

    test …
Run Code Online (Sandbox Code Playgroud)

python recursion iterator generator immutability

7
推荐指数
1
解决办法
3490
查看次数

标签 统计

generator ×1

immutability ×1

iterator ×1

python ×1

recursion ×1