代码之家  ›  专栏  ›  技术社区  ›  listener

将一个列表拆分为较小的重复元素列表,保留原始顺序(python)

  •  -1
  • listener  · 技术社区  · 6 年前

    例如,我有以下清单: N=[1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5, 1] 我需要把它分解如下: N2=[[1], [2, 2], [3, 3, 3], [4, 4, 4, 4], [5, 5, 5, 5, 5], [1]] 最后一个“1”保持在其原始位置 没有 正在与其他“1”分组。感谢您的帮助

    2 回复  |  直到 6 年前
        1
  •  0
  •   zwer    6 年前

    始终可以通过在列表上迭代、记住最后一个元素并在当前元素与最后一个元素不同时启动新列表来手动对它们进行分组:

    N = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5, 1]
    
    last = object()
    data = []
    for i in N:
        if i != last:
            data.append([])
        data[-1].append(i)
        last = i
    
    print(data)  # [[1], [2, 2], [3, 3, 3], [4, 4, 4, 4], [5, 5, 5, 5, 5], [1]]
    
        2
  •  1
  •   user3483203    6 年前

    使用 itertools.groupby

    x = [list(i) for _, i in itertools.groupby(N)]
    
    # Result 
    
    [[1], [2, 2], [3, 3, 3], [4, 4, 4, 4], [5, 5, 5, 5, 5], [1]]