def comb_gen(iterable):
    for r in range(len(iterable) + 1):
        for i in itertools.combinations(iterable, r):
            yield i

def upper_by_index(s, indexes):
    return ''.join(i.upper() if index in indexes else i for index, i in
        enumerate(s))
my_string = 'abcd'
for i in comb_gen(list(range(len(my_string)))):
    pass
Комбинация всех возможных случаев строки