我正在为以下问题寻找一个优雅的解决方案
我有一个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]]
,这显然是错误的顺序。
答案 0 :(得分:4)
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]]