【问题标题】:How to flatten mixed dimensional array into a two dimensional list?如何将混合维数组展平为二维列表?
【发布时间】:2018-02-03 13:27:19
【问题描述】:

我知道有很多关于如何展平二维列表的帖子,但这个有点不同,因为它是二维和三维列表的混合:

items = [[255, 204, 204], ..., [255, 179, 179], [[250, 250, 250], ..., [220, 220, 220]]]

我希望这个列表只有二维:

items = [[255, 204, 204], ..., [255, 179, 179], [250, 250, 250], ..., [220, 220, 220]]

我尝试使用列表推导,但它没有正确展平列表:

flat_list = [item for items in l for item in items]

将混合维数组展平为二维数组的最佳方法是什么?

【问题讨论】:

    标签: python list flatten


    【解决方案1】:
    old_list = [[255, 204, 204], [255, 179, 179], [['250, 250, 250'], ['220, 220, 220']]]                                                                                                         
    new_list = []  
    for i in old_list:
        if isinstance(i[0], list):
            for j in i:
                new_list.append(j)
        else:
            new_list.append(i)
    print new_list
    

    输出是:

    [[255, 204, 204], [255, 179, 179], ['250, 250, 250'], ['220, 220, 220']]
    

    【讨论】:

      【解决方案2】:

      你可以使用递归函数:

      def flatten(items):
          for item in items:
              if isinstance(item[0], list):
                  yield from flatten(item)
              else:
                  yield item
      

      演示:

      >>> items = [[255, 204, 204], [255, 179, 179], [['250, 250, 250'], ['220, 220, 220']]]
      >>> list(flatten(items))
      [[255, 204, 204], [255, 179, 179], ['250, 250, 250'], ['220, 220, 220']]
      

      【讨论】:

        【解决方案3】:
        from itertools import chain
        
        items = [[255, 204, 204], [255, 179, 179], [['250, 250, 250'], ['220, 220, 220']]]
        
        flat_list = list(chain.from_iterable(lst if isinstance(lst[0], list) else [lst] for lst in items))
        
        print(flat_list)
        >>> [[255, 204, 204], [255, 179, 179], ['250, 250, 250'], ['220, 220, 220']]
        

        【讨论】:

          【解决方案4】:
          def tree2matrix(T):
            if T == []:
              return []
            elif type(T) is not list:
              return [[T]]
            elif type(T[0]) is not list:
              return [T]
            else:
              return tree2matrix(T[0]) + tree2matrix(T[1:])
          
          X = [[255, 204, 204], [255, 179, 179], [['250, 250, 250'], ['220, 220, 220']]]
          print(tree2matrix(X))
          

          【讨论】:

            猜你喜欢
            • 2015-07-21
            • 2011-02-03
            • 2014-09-10
            • 2015-07-17
            • 2011-07-26
            • 2011-12-04
            • 2019-11-27
            • 2021-04-15
            • 2016-09-24
            相关资源
            最近更新 更多