Моя функция combinations(ary, p)
предназначена для return
каждой возможной комбинации порядка элементов в списке. Но он всегда возвращает первое значение несколько раз, даже если он находит все возможные заказы, которые я знаю, потому что он их печатает.
РЕДАКТИРОВАТЬ: Я хотел бы заставить его работать сам, учиться чему-то и не использовать какие-либо внешние библиотеки.
def combinations(ary, p):
ln = len(ary)
bary=[]
for a in range(ln-p):
if p<ln-2:
bb = combinations(ary, p+1)
for be in bb:
bary.append(be)
if p>=ln-2:
bary.append(ary)
ary.append(ary.pop(p))
return bary
Другая версия с функциями отладки print (). Я дам свой пример вывода.
def combinations(ary, p):
ln = len(ary)
bary=[]
for a in range(ln-p):
if p<ln-2:
bb = combinations(ary, p+1)
for be in bb:
bary.append(be)
if p>=ln-2:
--> bary.append(ary)
--> print('ary', ary, 'bary', bary)
ary.append(ary.pop(p))
return bary
Вывод на консоль после запуска с combinations([7,3,2], 0):
:
## There is clearly every possible combination:
##
## ||
## ||
\/
ary [7, 3, 2] bary [[7, 3, 2]]
ary [7, 2, 3] bary [[7, 2, 3], [7, 2, 3]]
ary [3, 2, 7] bary [[3, 2, 7]]
ary [3, 7, 2] bary [[3, 7, 2], [3, 7, 2]]
ary [2, 7, 3] bary [[2, 7, 3]]
ary [2, 3, 7] bary [[2, 3, 7], [2, 3, 7]]
[[7, 3, 2], [7, 3, 2], [7, 3, 2], [7, 3, 2], [7, 3, 2], [7, 3, 2]]
Последний список включает все возможные ордера, но содержит только вход Значение порядка, даже если он печатает каждый заказ. Так, где я испортил return
?