Мой метод похож на @Ahmad Faiyaz
from collections import defaultdict
x= [[1,1,'gdp'],[2,1,'hpi'],[3,1,'fdi'],[4,2,'fdi'],[5,2,'export'],[6,2,'gdp'],[7,3,'gdp'],[8,3,'export']]
c=defaultdict(list)
for i in x:
c[i[1]]+=[i]
def rec_cal(i,clus,lis):
if i in c.keys():
for j in c[i]:
if j[2] not in clus:
clus.append(j[2])
lis.append(j[0])
rec_cal(i+1,clus,lis)
clus.pop()
lis.pop()
else:
continue
else:
print(lis)
rec_cal(1,[],[])
и вы получите результат как
[1, 4, 8]
[2, 4, 7]
[2, 4, 8]
[2, 5, 7]
[2, 6, 8]
[3, 5, 7]
[3, 6, 8]
Этот метод сначала создает коллекцию кластеров с помощью словаря, а затем рекурсивно проходит через кластеры с учетом подгрупп для создания окончательного результата. сейчас я просто печатаю его, но вы можете легко его захватить