展平列表列表
您有一个列表列表,并希望将其转换为单个平面列表。例如,您可能有:
[ [1, 2, 3], [4, 5, 6], [7], [8, 9] ]
并旨在获得:
[1, 2, 3, 4, 5, 6, 7, 8, 9]
解决方案
嵌套列表理解提供了一个优雅的展平列表列表的解决方案:
flat_list = [x for xs in xss for x in xs]
这段代码迭代 xss 中的每个子列表及其元素,将结果累积到 flat_list 中。
或者,您可以使用带有连接的列表理解进行展平,或使用 sum() 函数:
flat_list = [j for i in xss for j in i] flat_list = sum(xss, []) # or sum(xss)
性能比较
虽然这些方法提供了等效的结果,他们的表现各不相同。基准测试显示,嵌套列表理解比其他方法要快得多,特别是对于大型输入列表。
这种卓越的性能源于以下事实:列表理解一次生成单个列表,仅复制每个项目一次。相比之下,基于 join 的方法会创建大量中间列表,而 sum() 方法涉及更复杂的操作。
递归方法
如果您的列表列表具有任意嵌套深度,您可能需要递归方法来完全展平。考虑以下函数:
def flatten_completely(xss): return [x for elem in xss for x in flatten_completely(elem) if not isinstance(x, list)] if isinstance(xss, list) else [xss]
以上是如何在 Python 中有效地展平列表列表?的详细内容。更多信息请关注PHP中文网其他相关文章!