Не уверен, почему вы хотите "избегать циклов", поскольку нет никакого способа узнать, что вызываемые вами функции в любом случае не используют циклы, добавляя накладные расходы при вызове функции.
Кроме того, после группировки вы теряете информацию о том, что она группирует, поэтому представляется целесообразным поместить вывод в dict
.
Это делает это:
from itertools import groupby
l = [1, 2, 2, 5, 8, 3, 3, 9, 0, 1]
result = {
key: [item[0] for item in group]
for key, group in groupby(sorted(enumerate(l), key=lambda x: x[1]), lambda x: x[1])
}
print(result)
Выход:
{0: [8], 1: [0, 9], 2: [1, 2], 3: [5, 6], 5: [3], 8: [4], 9: [7]}