【问题标题】:How to unnest a nested list [duplicate]如何取消嵌套嵌套列表[重复]
【发布时间】:2012-08-05 07:47:15
【问题描述】:

可能重复:
Making a flat list out of list of lists in Python

我正在尝试找到一种简单的方法将多维(嵌套)python 列表转换为单个列表,其中包含子列表的所有元素。

例如:

A = [[1,2,3,4,5]]

转向

A = [1,2,3,4,5]

A = [[1,2], [3,4]]

转向

A = [1,2,3,4]

【问题讨论】:

标签: python


【解决方案1】:

使用reduce函数

reduce(lambda x, y: x + y, A, [])

sum

sum(A, [])

【讨论】:

  • reduce 在 Python 3 中被删除。sum 版本有效,但itertools.chain 方法更快。
【解决方案2】:

第一种情况也可以很容易做到:

A=A[0]

【讨论】:

  • OP 写道,[[1,2], [3,4]] 应该变成[1,2,3,4]。您的解决方案返回 [1,2]!
【解决方案3】:

itertools 为此提供了chain 函数:

来自http://docs.python.org/library/itertools.html#recipes

def flatten(listOfLists):
    "Flatten one level of nesting"
    return chain.from_iterable(listOfLists)

请注意,结果是可迭代的,因此您可能需要list(flatten(...))

【讨论】:

    【解决方案4】:

    使用itertools.chain:

    itertools.chain(*iterables):

    创建一个迭代器,它从第一个可迭代对象返回元素,直到它用尽,然后继续下一个可迭代对象,直到所有可迭代对象都用完。用于将连续序列视为单个序列。

    Example:

    from itertools import chain
    
    A = [[1,2], [3,4]]
    
    print list(chain(*A))
    # or better: (available since Python 2.6)
    print list(chain.from_iterable(A))
    

    输出是:

    [1, 2, 3, 4]
    [1, 2, 3, 4]
    

    【讨论】:

    • 澄清列表中的所有对象必须是列表本身很有用。例如,如果 'A= ['year', [1] ]' 那么 'chain' 将不会产生预期的结果。它需要 'A = [['year'], [1]]'。
    • @msh855 字符串也是可迭代的。因此,在这种情况下,似乎更多的是期望问题,而不是结果问题。
    • 你试过了吗,还是确实是意料之中的事?。我试过这个: A= ['year', [1,2,'bad']] list(chain(*A)) list(chain.from_iterable(A)) 并产生: Out[153]: ['y' , 'e', 'a', 'r', 1, 2, '坏']
    • 你传递了两个迭代器,它们都是迭代的。第一个生成字符串中的字符,第二个生成列表元素。如果您需要不同的行为,您可能需要编写特定的代码。
    猜你喜欢
    • 2018-09-28
    • 2021-12-04
    • 2019-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-31
    • 1970-01-01
    相关资源
    最近更新 更多