我有一个清单:
lst = [1, 1, 3, 5, 1, 4, 4]
预期的输出(键是数字,值是这些数字的索引):
{1: [0, 1, 4], 3: [2], 5: [3], 4: [5, 6]}
好吧,我知道有很多方法可以实现这一目标。
res = defaultdict(list)
for idx, e in enumerate(lst):
res[e].append(idx)
要么:
res = {}
for idx, e in enumerate(lst):
res.setdefault(e, []).append(idx)
我想知道我们能否通过dict理解来实现这一目标。纯娱乐 :)。
效率并不重要。(最好是O(n)
)。
我认为最有效的是:
from itertools import groupby
from operator import itemgetter
lst = [1, 1, 3, 5, 1, 4, 4]
res = { k : [i for i, _ in group] for k, group in groupby(sorted(enumerate(lst), key=itemgetter(1)), key=itemgetter(1))}
print(res)
输出量
{1: [0, 1, 4], 3: [2], 4: [5, 6], 5: [3]}
这是O(NlogN)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句