【问题标题】:How to write a code for a flattening of nested lists more concisely如何更简洁地编写扁平化嵌套列表的代码
【发布时间】:2023-11-13 19:29:01
【问题描述】:

我在一个列表中有一组嵌套列表。

想想这样的数据:

numberlist1 = [[[1,2]]]
numberlist2 = [[[1,2]]]

这正是我希望它工作的方式。但是,它看起来很乱,我相信有更好的方法来做到这一点。谁能帮我格式化这段代码?

list(chain(*chain(*(chain.from_iterable([numberlist1, numberlist2])))))

【问题讨论】:

    标签: python list itertools flatten


    【解决方案1】:

    编写原件的常用方法:

    list(chain.from_iterable(chain.from_iterable(chain(numberlist1, numberlist2))))
    

    制作更短的别名:

    flat = chain.from_iterable
    
    list(flat(flat(chain(numberlist1, numberlist2))))
    

    列表理解——如果你能选择有意义的名字,效果最好:

    [c for a in chain(numberlist1, numberlist2) for b in a for c in b]
    

    f u n c t i o n a l

    def repeat(count, f):
        def g(x):
            for i in range(count):
                x = f(x)
            return x
        return g
    
    
    list(repeat(3, flat)((numberlist1, numberlist2)))
    

    【讨论】:

      【解决方案2】:

      使用more_itertools.collapse 可以缩短:

      给定

      import more_itertools as mit
      
      
      nlst1 = [[[1, 2]]]
      nlst2 = [[[1, 3]]]
      

      代码

      list(mit.collapse(nlst1 + nlst2))
      # [1, 2, 1, 3]
      

      more_itertools 是第三方包。通过> pip install more_itertools安装。

      【讨论】:

        最近更新 更多