Одним из способов решения этой проблемы было бы преобразование вашего списка в структуру дерева, а затем цикл по этому дереву для построения представления строк ваших данных
from collections import defaultdict
tree = lambda: defaultdict(tree)
lst = [[1, 2, 'a'], [1, 2, 'b'], [1, 1, 'a'], [1, 1, 'b'], [2, 2, 'a']]
def make_tree(lst):
d = tree()
for x in lst:
curr = d
for item in x:
curr = curr[item]
return d
d = make_tree(lst)
def make_strs(d, indent=0):
strs = []
for k, v in d.items():
strs.append(' ' * indent + str(k))
strs.extend(make_strs(v, indent+1))
return strs
def print_tree(d):
print('\n'.join(make_strs(d)))
print_tree(d)
print
1
2
a
b
1
a
b
2
2
a