В строке:
c = "abcabcdefdefjhi"
print "\n".join(["%s: %s" %( e, ", ".join([ str(j) for j, e2 in enumerate(c) if e2==e]) ) for i, e in enumerate(sorted(set(c)))])
1) Список неповторяющихся:
sorted(set(c))
['a', 'b', 'c', 'd',' e ',' f ',' h ',' i ',' j ']
2) Список позиций по буквам
[ (i, e) for i, e in enumerate(sorted(set(c)))]
[(0, «a»), (1, «b»), (2, «c»), (3, «d»), ..., (6, «h»), (7, «i»'), (8,' j ')]
3) Группировка позиций по буквам:
[( e, [ j for j, e2 in enumerate(c) if e2==e] ) for i, e in enumerate(sorted(set(c)))]
[(' a ', [0, 3]), ('b', [1, 4]), ('c', [2, 5]), ..., ('i', [14]), ('j', [12])]
4) Сокращается в одну строку
print "\n".join(["%s: %s" %( e, ", ".join([ str(j) for j, e2 in enumerate(c) if e2==e]) ) for i, e in enumerate(sorted(set(c)))])
a: 0, 3
b: 1, 4
c: 2, 5
д: 6, 9
е: 7, 10
f: 8, 11
ч: 13
i: 14
j: 12