Я пытаюсь создать списки инкрементных индексов, которые я хочу использовать для последующего анализа. Хотя следующий код работает для создания списков из 2 индексов, он не работает для произвольного числа индексов. Вот код для генерации списков из двух инкрементных индексов.
max_len = 9
idxs_len2 = [[idx1, idx2] for idx1 in range(1, max_len) for idx2 in range(idx1 + 1, max_len)]
Например, чтобы генерировать списки из трех инкрементных индексов, мне нужно вручную изменить код на следующее:
idxs_len3 = [
[idx1, idx2, idx3]
for idx1 in range(1, max_len)
for idx2 in range(idx1 + 1, max_len)
for idx3 in range(idx2 + 1, max_len)
]
Итак, в настоящее время я не могу генерировать списки инкрементных индексов для произвольного числа индексов. Я подумал, что мне может понадобиться создать рекурсивную функцию для создания списков индексов произвольной длины. Хотя я много узнал о рекурсивных функциях в Интернете, я не смог применить теорию к своему конкретному c сценарию использования. До сих пор я мог придумать только следующее (что не дает желаемого результата):
def generate_idxs(idx1, all_idxs, max_depth=3, max_len=9):
current_idxs = []
for idx2 in range(idx1 + 1, max_len):
if len(current_idxs) < max_depth:
current_idxs.append(idx2)
else:
all_idxs.append(current_idxs)
generate_idxs(idx2, all_idxs, max_len=9)
# Calling the function
idxs_len3_test = []
generate_idxs(0, idxs_len3_test, max_len=9)
idxs_len3 == idxs_len3_test # ==> Yields False
Кто-нибудь знает ответ на эту проблему или может указать мне правильное направление? Спасибо за ваше время, я очень ценю это.
Лучший, Кевин
РЕДАКТИРОВАТЬ: Спасибо всем за ваши ответы! Я, вероятно, должен был упомянуть, что генерация списка кортежей также хороша, и что она не обязательно должна быть рекурсивной функцией, которая делает свое дело. Я просто подумал, что это возможно только с помощью рекурсивной функции, но я не знал, что мою проблему можно решить и без рекурсивной функции.