展平嵌套列表列表的任务可能具有挑战性,尤其是当嵌套不规则时。提出的问题研究了以下扁平化算法的功效:
def flatten(x): result = [] for el in x: if hasattr(el, "__iter__") and not isinstance(el, basestring): result.extend(flatten(el)) else: result.append(el) return result
但是,该问题还提出了使用生成器函数的替代方法的可能性。
基于生成器的函数可以简化扁平化过程并有可能提高性能。以下是 Python 2 和 3 的示例:
利用 Python 2.6 中引入的 Iterable ABC:
from collections import Iterable def flatten(xs): for x in xs: if isinstance(x, Iterable) and not isinstance(x, basestring): for item in flatten(x): yield item else: yield x
中Python 3 中,basestring 类型不再存在,可以使用元组 (str, bytes) 代替。此外,yield from 运算符简化了生成器的迭代:
from collections.abc import Iterable def flatten(xs): for x in xs: if isinstance(x, Iterable) and not isinstance(x, (str, bytes)): yield from flatten(x) else: yield x
基于生成器的方法具有更简洁且可能更高效的优点,因为它避免了中间列表并逐步累积结果.
以上是如何使用递归和基于生成器的方法在 Python 中有效地展平不规则嵌套列表?的详细内容。更多信息请关注PHP中文网其他相关文章!