美文网首页
Python将多层嵌套的列表展平

Python将多层嵌套的列表展平

作者: yousa_ | 来源:发表于2019-10-01 09:35 被阅读0次

如果有一个列表嵌套列表的数据结构,形如:

[1,2,3,4,[1,2,[1,4,6,8]],7]

现在我们想把它展平:

[1, 2, 3, 4, 1, 2, 1, 4, 6, 8, 7]

通常的做法是:



利用层次递归来实现,但是这样也有缺陷:需要把储存结果的列表作为参数不停递归传入。
占用内存太大。

解决方案

可以采用生成器来解决



输出结果


besides

其中, yield from是从Python 3.3开始引入的写法:

yield from x

等价于

for g in x:
  yield g

所以,当代码运行到

[x for x in solution._flat(aList))]

时,每一次循环都会进入到 flat生成器里面。在 flat里面,对传入的参数使用for循环进行迭代,如果拿到的元素不是列表,那么就直接抛出,送到上一层。如果当前已经是最上层了,那么就再一次抛出给外面的列表推导式。如果当前元素是列表,那么继续生成一个生成器,并对这个新的生成器进行迭代,并把每一个结果继续往上层抛出。
最终,每一个数字都会被一层一层往上抛出给列表推导式,从而获得需要的结果。
去掉from,运行结果如下:


显然是不对的,此外,可以吧yield from换成
for x in self._flat(element):
    yield x

最终结果是一样的。

相关文章

  • Python将多层嵌套的列表展平

    如果有一个列表嵌套列表的数据结构,形如: 现在我们想把它展平: 通常的做法是: 利用层次递归来实现,但是这样也有缺...

  • python(7):字典(2)

    1.嵌套 将一系列字典存贮再列表中,或将列表作为值存贮在字典中,称为嵌套。可以在列表中嵌套字典,字典中嵌套列表,字...

  • 自定义列表逻辑梳理

    导语 在ckeditor中,列表是多层嵌套结构,li元素是ul或ol的唯一类型元素,所以被嵌套列表ul或ol必须被...

  • 046-多层表达式

    for循环可以嵌套,因此,在列表生成式中,也可以用多层 for 循环来生成列表。 对于字符串 'ABC' 和 '1...

  • 10-4多层表达式

    for循环可以嵌套,因此,在列表生成式中,也可以用多层 for 循环来生成列表。 对于字符串 'ABC' 和 '1...

  • 53-多层表达式

    for循环可以嵌套,因此,在列表生成式中,也可以用多层for循环来生成列表。 对于字符串 'ABC' 和 '123...

  • Python:嵌套

    1.在列表中嵌套字典 字典列表:将字典存储在列表中 2.在字典中嵌套列表 将列表存储在字典中每当需要在字典中讲一个...

  • 8、Python列表

    上集回顾: Python函数 while循环嵌套 Python列表(list)是一种有序的集合,是 Python ...

  • Python3 - 展开嵌套的序列

    问题 将一个多层嵌套的序列展开成一个单层列表 解决方案 可以写一个包含 yield from 语句的递归生成器来轻...

  • Python基础-08数据嵌套

    8.数据嵌套     在Python中,各种数据是可以相互嵌套的,如列表中嵌套元组、整型、字典等,字典中也可以嵌套...

网友评论

      本文标题:Python将多层嵌套的列表展平

      本文链接:https://www.haomeiwen.com/subject/btopuctx.html