展平嵌套列表(再次)

时间:2014-08-05 14:40:19

标签: python

我正在尝试压缩嵌套列表(实际上是一堆带有一些分支的命令,具体取决于True或False结果)。我需要从这么一堆构建一个简单的线性“管道”列表来运行。

无论如何,这是一个基本的例子:

[0, 1, ['T', [2, 3, ['T', [4], 'F', [5]]], 'F', [6, 7]], 8]

我希望得到:

[[0, 1, 'T', 2, 3, 'T', 4, 8],  
 [0, 1, 'T', 2, 3, 'F', 5, 8],
 [0, 1, 'F', 6, 7, 8]]

我试图派生this,然后去了:

def _flatten(commands, pipeline=None, queue=None):
    global loop
    if pipeline is None:
        pipeline = []  # new pipeline started
    if queue is None:
        queue = []
    for com in commands:
        if not hasattr(com, '__iter__'):
            pipeline.append(com)
        else: #new list
            new_pipeline = pipeline[:] # keep existing root
            _flatten(com, new_pipeline, queue)
    #import pdb; pdb.set_trace()
    queue.append(pipeline)
    return queue

我不是那么远,因为我的结果是:

[[0, 1, 'T', 2, 3, 'T', 4],
 [0, 1, 'T', 2, 3, 'T', 'F', 5],
 [0, 1, 'T', 2, 3, 'T', 'F'],
 [0, 1, 'T', 2, 3],
 [0, 1, 'T', 'F', 6, 7],
 [0, 1, 'T', 'F'],
 [0, 1, 8]]

1 个答案:

答案 0 :(得分:1)

您可以将itertools用于迭代器的大多数操作。

展平你将使用itertools.chain

>>> import itertools
>>> itertools.chain.from_iterable(listOfLists)

您将在文档中获得更多itertools recipes