列表列表中的列表组

时间:2015-06-22 11:16:40

标签: python list

我正在为以下问题寻找一个优雅的解决方案 我有一个ints列表,我想创建一个列表列表,其中具有相同值的索引按照所述列表的出现顺序组合在一起。

[2, 0, 1, 1, 3, 2, 1, 2]应该产生[[0, 5, 7], [1], [2, 3, 6], [4]]
到目前为止我的解决方案:

list = [2, 0, 1, 1, 3, 2, 1, 2]
cc = [[] for i in range(max(list)+1)]

for x in range(0, max(list)+1):
    cc[x] = []
    for i, j in enumerate(list):
        if j == x:
            cc[x].append(i)

print("cc: ", cc)

产生[[1], [2, 3, 6], [0, 5, 7], [4]],这显然是错误的顺序。

1 个答案:

答案 0 :(得分:4)

使用collections.OrderedDict

from collections import OrderedDict
od = OrderedDict()
lst = [2, 0, 1, 1, 3, 2, 1, 2]
for i, x in enumerate(lst):
    od.setdefault(x, []).append(i)
...
>>> od.values()
[[0, 5, 7], [1], [2, 3, 6], [4]]