将args转换为平面列表?

mpe*_*pen 2 python list

我知道这其他几个问题非常相似,但我无法使这个功能正常工作.

def flatten(*args):
    return list(item for iterable in args for item in iterable)
Run Code Online (Sandbox Code Playgroud)

我正在寻找的输出是:

flatten(1) -> [1]
flatten(1,[2]) -> [1, 2]
flatten([1,[2]]) -> [1, 2]
Run Code Online (Sandbox Code Playgroud)

我从另一个SO答案中获取的当前函数似乎根本没有产生正确的结果:

>>> flatten([1,[2]])
[1, [2]]
Run Code Online (Sandbox Code Playgroud)

Pie*_*oet 6

要快速解决方案,只需使用第二个函数并使其递归.

def flatten(*args):
    output = []
    for arg in args:
        if hasattr(arg, '__iter__'):
            output.extend(flatten(*arg))
        else:
            output.append(arg)
    return output
Run Code Online (Sandbox Code Playgroud)