我正在尝试压缩嵌套列表(实际上是一堆带有一些分支的命令,具体取决于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]]
答案 0 :(得分:1)
您可以将itertools
用于迭代器的大多数操作。
展平你将使用itertools.chain
>>> import itertools
>>> itertools.chain.from_iterable(listOfLists)
您将在文档中获得更多itertools recipes。