python如何制作一个任意列表_在Python中扁平化任意嵌套列表的最快方法是什么?...

本文介绍了两种改进的扁平化函数,一种使用deque和迭代器,另一种引入sentinel对象,用于更优雅地处理嵌套迭代。通过示例展示了如何将复杂数据结构简化为一维列表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

慕用2447696

此函数应该能够快速平整嵌套的可迭代容器,而无需使用任何递归:import collectionsdef flatten(iterable):    iterator = iter(iterable)    array, stack = collections.deque(), collections.deque()    while True:        try:            value = next(iterator)        except StopIteration:            if not stack:                return tuple(array)            iterator = stack.pop()        else:            if not isinstance(value, str) \               and isinstance(value, collections.Iterable):                stack.append(iterator)                iterator = iter(value)            else:                array.append(value)大约五年后,我对此事的看法发生了变化,使用它可能会更好:def main():    data = [1, 2, [3, 4, [5], []], [6]]    print(list(flatten(data)))def flatten(iterable):    iterator, sentinel, stack = iter(iterable), object(), []    while True:        value = next(iterator, sentinel)        if value is sentinel:            if not stack:                break            iterator = stack.pop()        elif isinstance(value, str):            yield value        else:            try:                new_iterator = iter(value)            except TypeError:                yield value            else:                stack.append(iterator)                iterator = new_iteratorif __name__ == '__main__':    main()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值