在 Python 中使用可迭代对象展平浅列表
在 Python 中,展平浅列表(其中每个元素本身就是一个可迭代对象)可能会带来挑战。本文探讨了有效扁平化此类列表的多种方法,优先考虑性能和代码清晰度。
方法:
列表理解
尝试使用嵌套列表理解可能会引发由于嵌套循环中未定义的变量而导致的名称错误:
[image for image in menuitem for menuitem in list_of_menuitems]
使用 Lambda 函数进行归约:
使用 lambda 函数进行归约可以提供简单的解决方案:
reduce(list.__add__, map(lambda x: list(x), list_of_menuitems))
但是,这种方法的可读性可能会受到影响由于使用了list(x)。
Itertools.chain()
Itertools.chain()提供了一种高效且优雅的方法展平浅列表。它将迭代无缝连接成单个迭代:
from itertools import chain list(chain(*list_of_menuitems))
这种方法避免了冗余副本,并提供了可比的性能来减少。
Itertools.chain.from_iterable ()
为了提高清晰度,请考虑使用itertools.chain.from_iterable():
chain = itertools.chain.from_iterable([[1,2],[3],[5,89],[],[6]]) print(list(chain))
这明确地表达了扁平化,而不使用运算符魔术。
结论:
Itertools.chain() 及其变体提供了有效且可读的方法扁平化浅表列表,优先考虑性能和代码清晰度。选择方法时请考虑具体的用例和可读性偏好。
以上是如何在 Python 中有效地展平浅列表?的详细内容。更多信息请关注PHP中文网其他相关文章!