在 Python 中,展平可迭代的浅列表可能是将嵌套结构转换为单级列表的常见任务。有多种方法可以实现此目的,但性能和代码可读性水平各不相同。
最初的尝试可能涉及嵌套列表理解,如下所示:
[image for image in menuitem for menuitem in list_of_menuitems]
但是,这将遇到 NameError,因为“menuitem”未在外部理解的范围内定义。
另一种选择是使用reduce函数:
reduce(list.__add__, map(lambda x: list(x), list_of_menuitems))
虽然此方法会展平列表,但使用 list(x) 调用将 QuerySet 对象转换为列表可能会妨碍其可读性。
一种高效而优雅的解决方案由 itertools 模块提供,特别是 itertools.chain。它允许在数据结构的扁平化版本上进行迭代,而无需创建新列表:
from itertools import chain list(chain(*list_of_menuitems))
这种方法避免了将项目复制到新列表中,从而减少了开销。避免使用解包运算符 * 的稍微更明确的版本是:
chain = itertools.chain.from_iterable([[1, 2], [3], [5, 89], [], [6]]) print(list(chain)) # [1, 2, 3, 5, 89, 6]
这些技术对于展平浅列表同时平衡性能和可读性非常有价值。
以上是如何在 Python 中有效地展平浅列表?的详细内容。更多信息请关注PHP中文网其他相关文章!