如何压扁嵌套的#34;同质的#34;名单

时间:2016-08-03 20:06:27

标签: python list

我已阅读What is the fastest way to flatten arbitrarily nested lists in Python?,它为如何在Python中展平任意嵌套列表提供了很好的答案。但是,很多时候,列表嵌套到任意深度但是同质。同构嵌套列表在相同深度的所有列表元素之间具有相同的结构。

  • 这是一个同质列表:[[0, 1], [2, 3]]
  • 这不是同质列表:[0, 1, [2, 3]]

平衡这种低深度列表的最佳方法是惯用列表理解:[inner for outer in seq for inner in outer]对于较大的深度,这很快变得笨重,占用了许多线来表达一个简单的想法。考虑一下:[more_inner inner for outer in seq for inner in outer for more_inner in inner]这很难理解,这是一个眼睛。

对于这种常见的特殊情况,我们能否提出一个既可读又有效的特定解决方案?

1 个答案:

答案 0 :(得分:-5)

这是我的解决方案:

def homo_flat( seq ):
    first = 0
    while True:
        if type( seq[ first ] ) not in [ list, tuple ]:
            return seq
        else:
            seq = [ inner for outer in seq for inner in outer ]