【问题标题】:Covert complexed list to flat list将复杂列表转换为平面列表
【发布时间】:2020-01-26 15:36:08
【问题描述】:

我有一长串由 numpy 数组和整数组成的复杂列表,下面是一个示例:

[array([[2218.67288865]]), array([[1736.90215229]]), array([[1255.13141592]]), array([[773.36067956]]), array([[291.58994319]]), 0, 0, 0, 0, 0, 0, 0, 0, 0]

我想将其转换为常规列表:

[2218.67288865, 1736.90215229, 1255.13141592, 773.36067956, 291.58994319, 0, 0, 0, 0, 0, 0, 0, 0, 0]

我怎样才能有效地做到这一点?

【问题讨论】:

    标签: python list numpy


    【解决方案1】:

    您可以使用np.ravel 坚持numpy

    np.hstack([np.ravel(i) for i in l]).tolist()
    

    输出:

    [2218.67288865,
     1736.90215229,
     1255.13141592,
     773.36067956,
     291.58994319,
     0.0,
     0.0,
     0.0,
     0.0,
     0.0,
     0.0,
     0.0,
     0.0,
     0.0]
    

    【讨论】:

      【解决方案2】:

      这里最简单的似乎也是最快的:

      x = [array([[2218.67288865]]), array([[1736.90215229]]), array([[1255.13141592]]), array([[773.36067956]]), array([[291.58994319]]), 0, 0, 0, 0, 0, 0, 0, 0, 0]
      [y if y.__class__==int else y.item(0) for y in x]
      # [2218.67288865, 1736.90215229, 1255.13141592, 773.36067956, 291.58994319, 0, 0, 0, 0, 0, 0, 0, 0, 0]
      
      timeit(lambda:[y if y.__class__==int else y.item(0) for y in x])
      # 2.198630048893392
      

      【讨论】:

        【解决方案3】:

        list(itertools.from_iterable(itertools.from_iterable(...))) 应该适用于删除 2 层嵌套:只需根据需要添加或删除 itertools.from_iterable(...) 的副本。

        【讨论】:

          【解决方案4】:

          您可以使用生成器来展平嵌套列表:

          def convert(obj):
              try:
                  for item in obj:
                      yield from convert(item)
              except TypeError:
                  yield obj
          
          result = list(convert(data))
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-04-24
            • 2013-07-26
            • 2012-09-03
            • 1970-01-01
            • 2022-01-23
            • 1970-01-01
            • 2019-05-26
            • 2012-05-24
            相关资源
            最近更新 更多