<Python> 递归展开嵌套列表等可迭代对象(list,dict,set...)

来源:互联网 发布:another mysql daemon 编辑:程序博客网 时间:2024/06/15 07:39

展开嵌套列表算法是一个常考点,既是基础,但是要写好也不简单,我见过很多个版本,老手和新手之间的差别简直堪比云泥。接下来分享一个高效又巧妙的版本,代码也很短。

废话不多说直接上代码:

def flatten(obj, ignore_itmes=(str, bytes)):    for item in obj:        if isinstance(item, Iterable) and not isinstance(item, ignore_itmes):            yield from flatten(item)        else:            yield item

使用yield构建生成器可以有很好的性能,ignore_items当中可以自定义不想被当做迭代对象的类型集合,最巧妙的点在于yield from递归调用自身这个生成器。

可以说是性能/空间的利用率都相当高,代码没几行但是充分体现了Python的精炼美。

阅读全文
0 0
原创粉丝点击