首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当list包含1个单独的项目时,展平嵌套列表

当list包含1个单独的项目时,展平嵌套列表
EN

Stack Overflow用户
提问于 2018-12-06 07:13:06
回答 2查看 42关注 0票数 1

基本上,我正在尝试的是,当列表包含一个单独的项目时,我是否可以将嵌套列表展平,这是另一个列表。以下面的数据结构为例:

代码语言:javascript
复制
[['a', 'b', 'c', [['d', 'e', 'f']]]]

理想的数据格式应该是:

代码语言:javascript
复制
['a', 'b', 'c', ['d', 'e', 'f']]

这种嵌套可以达到任何级别的深度,但只需要将单个列表数据展平即可。有人知道怎么做吗?我在SO上得到的最接近的答案是:Flattening a list recursively,但这把列表完全拉平了。

EN

回答 2

Stack Overflow用户

发布于 2018-12-06 07:21:08

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

代码语言:javascript
复制
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

因此:

代码语言:javascript
复制
list(simplify([['a', 'b', 'c', [['d', 'e', 'f']]]]))

返回:

代码语言:javascript
复制
['a', 'b', 'c', ['d', 'e', 'f']]
票数 2
EN

Stack Overflow用户

发布于 2018-12-06 07:21:01

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

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53642222

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档