📜  如何在python中展平列表列表(1)

📅  最后修改于: 2023-12-03 15:24:34.999000             🧑  作者: Mango

如何在python中展平列表列表

在python中处理列表是非常常见的操作。当遇到嵌套列表时,我们需要将它展平为一个一维的列表,以便进一步处理。

方法一:使用迭代器和递归
代码示例
def flatten(lst):
    for item in lst:
        if isinstance(item, list):
            yield from flatten(item)
        else:
            yield item

lst = [[1, 2, 3], [4, 5, [6, 7], 8], 9]
result = list(flatten(lst))
print(result)
解析

这个方法使用生成器(Generator)遍历列表中的每个元素,如果元素是列表类型,就进一步递归处理,否则直接将元素yield出去。最终返回一个迭代器对象,需要使用list()方法将其转换为列表。

方法二:使用列表推导式
代码示例
lst = [[1, 2, 3], [4, 5, [6, 7], 8], 9]
result = [item for sublist in lst for item in (sublist if isinstance(sublist, list) else [sublist])]
print(result)
解析

这个方法使用列表推导式,遍历列表中的每个元素,如果元素是列表类型,就使用一个二次循环,将嵌套列表的元素逐个取出,加入新列表。如果不是列表类型,直接将元素加入新列表。

方法三:使用reduce函数
代码示例
from functools import reduce

lst = [[1, 2, 3], [4, 5, [6, 7], 8], 9]
result = reduce(lambda x, y: x + y if isinstance(y, list) else x + [y], lst, [])
print(result)
解析

这个方法使用reduce函数,将列表中的元素逐个处理,对于列表类型的元素,将递归展平后的列表与当前元素相加,对于非列表类型的元素,则将其加入新列表中。最终返回一个展平后的新列表。

总结

以上三种方法都可以实现展平嵌套列表的功能,使用时应根据具体情况选择。其中使用迭代器和递归的方法最为pythonic,但需要理解迭代器和生成器的概念。使用列表推导式虽然代码简单,但不够直观。使用reduce函数需要理解reduce的用法,但功能最为强大。