Я хочу генерировать комбинации из списка без учета смежных элементов.
Я пробовал код, который предоставляет комбинации без учета смежных элементов, и он работает с уникальными элементами в списке.
Но это не работает с повторяющимися элементами в списке, например. [4,5,4,3]
Код:
import itertools
b = []
stuff = [4,5,4,3]
for L in range(2, len(stuff)+1):
for subset in itertools.combinations(stuff, L):
a =list(subset)
for i in range(1,len(a)):
if stuff.index(a[i-1]) == stuff.index(a[i])-1:
a.clear()
break
else:
b.append(a)
print('b = ',b)
Ожидаемый результат = [[4,4],[4,3],[5,3]]
Фактический результат = [[4, 4], [4, 3], [5, 4], [5, 3], [4, 3], [4, 4, 3], [4, 4, 3], [5, 4, 3], [5, 4, 3]]
Я могу объяснить на примере: предположим, что список [1,2,3,4,5], тогда возможные несмежные комбинации [[1,3], [1,4], [1,5], [2,4], [2,5], [3,5], [1,3,5]]. Я хочу эти комбинации. Код, который я пробую, хорошо работает с уникальным набором, но когда есть повторение чисел в данном списке, например [1,3,2,3,2,5], тогда при взятии индекса всегда берут первые 3, а не другие один. Так как же получить комбинации из этого набора