首页 > 解决方案 > 从列表中创建相等值索引的子列表

问题描述

我正在尝试将整数列表拆分为相等整数索引的子列表。所以说我有一个清单:

original_list = [1,2,1,4,4,4,3,4,4,1,4,3,3]

所需的输出将是:

indexes : [[0,2,9], [1], [6,11,12], [3,4,5,7,8,10]]
# corresponds to sublists: [[1,1,1] [2], [3,3,3], [4,4,4,4,4,4]]

我不知道如何做到这一点,因为大多数解决方案都要求您首先对原始列表进行排序,但就我而言,这会弄乱索引。由于这个原因,Itertools 或 np.arrays 对我没有帮助,因为它们只对顺序相等的元素进行分组。

有谁知道这个问题的解决方案?我很想听!

标签: pythonpython-3.xlist

解决方案


这是我使用 numpy 执行此操作的方法,使用我在评论中链接的 argsort 函数。

original = [1,2,1,4,4,4,3,4,4,1,4,3,3]
indexes = []
s = set()

for n in np.argsort(original):
    if original[n] in s:
        indexes[-1].append(n)
    else:
        indexes.append([n])
        s.add(original[n])

print(indexes)

推荐阅读