当列表包含一个单独的项目(另一个列表)时,拼合嵌套列表

时间:2018-12-05 23:13:06

标签: python list nested flatten

基本上,我正在尝试查看当列表包含1个单项(即另一个列表)时是否可以展平嵌套列表。例如,采用以下数据结构:

[['a', 'b', 'c', [['d', 'e', 'f']]]]

理想的数据格式为:

['a', 'b', 'c', ['d', 'e', 'f']]

此嵌套可以扩展到任何数量的级别,但只需要展平单个列表数据。有人知道这样做的方法吗?关于SO的答案,我得到的最接近的是:Flattening a list recursively,但这完全使整个列表变得平坦。

2 个答案:

答案 0 :(得分:2)

您可以使用一个递归函数来专门测试给定列表中是否只有一项以及该项是否为列表,如果有,则跳过产生该列表的操作:

def simplify(l):
    if len(l) == 1 and isinstance(l[0], list):
        yield from simplify(l[0])
    else:
        for i in l:
            yield list(simplify(i)) if isinstance(i, list) else i

这样:

list(simplify([['a', 'b', 'c', [['d', 'e', 'f']]]]))

返回:

['a', 'b', 'c', ['d', 'e', 'f']]

答案 1 :(得分:0)

递归函数可以做到这一点:

def flatten(l: list):
    if len(l) == 1:
        if isinstance(l[0], list):
            l = l[0]
    for i, elem in enumerate(l):
        if isinstance(type(elem), list):
            l[i] = flatten(elem)
    return l