【问题标题】:List of lists python: combine list elements that are the same size列表列表python:组合相同大小的列表元素
【发布时间】:2018-08-23 10:35:50
【问题描述】:

我在 python 中有一个列表列表:

[[1],[2],[3,4],[5,6],[7,8,9,10,11],[12,13,14,15,16],[17]]

如果子列表包含相同数量的元素,我想将它们组合成一个子列表:

[[1,2,17],[3,4,5,6],[7,8,9,10,11,12,13,14,15,16]]

有简单的方法吗?

【问题讨论】:

  • 你已经尝试了什么?

标签: python python-3.x list list-comprehension


【解决方案1】:

使用来自itertoolsgroupbychain

例如:

from itertools import groupby, chain

lst = [[1],[2],[3,4],[5,6],[7,8,9,10,11],[12,13,14,15,16],[17]]

result = [list(chain.from_iterable(v)) for k, v in groupby(sorted(lst, key=lambda h: len(h)), lambda x: len(x))]
print(result)

输出:

[[1, 2, 17], [3, 4, 5, 6], [7, 8, 9, 10, 11, 12, 13, 14, 15, 16]]
  • sorted(lst, key=lambda h: len(h)) 按 len 对列表进行排序
  • 然后使用groupby 将您的列表按列表中的len 分组

【讨论】:

    【解决方案2】:

    没有itertools 的“更简单”的方法:

    dictByLength = {}
    for i in mylist:
        dictByLength[len(i)] = dictByLength.get(len(i), []) + i
    print(list(dictByLength.values()))
    

    输出:

    [[1, 2, 17], [3, 4, 5, 6], [7, 8, 9, 10, 11, 12, 13, 14, 15, 16]]
    

    【讨论】:

      【解决方案3】:

      这是我的方法(不使用itertools):

      l = [[1],[2],[3,4],[5,6],[7,8,9,10,11],[12,13,14,15,16],[17]]
      
      # create one sublist for each possible length
      m = [[] for size in range(len(max(l, key=len)))]
      
      # append to each size-sublist, the appropriate sublist
      for sub_l in l:
          size = len(sub_l)
          m[size - 1] += sub_l
      
      # remove empty sub lists
      m = [sub_m for sub_m in m if sub_m]
      
      print(m)
      
      [[1, 2, 17], [3, 4, 5, 6], [7, 8, 9, 10, 11, 12, 13, 14, 15, 16]]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-03-02
        • 2022-06-15
        • 1970-01-01
        • 2019-04-21
        • 2017-05-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多