Я следующую задачу:рекурсивные функции на список кортежей
Прежде всего, у меня есть список кортежей, как следующее:
[(1,2),(2,3),(4,5),(5,6),(5,7),(5,8),(6,9),(6,10),(7,11),(12,14)]
Чтобы сделать вещи проще, скажем, что первый число в каждом кортеже «управляет» вторым (для тех, кто знаком с анализом зависимостей, первое число представляет собой индекс головы, а второй - индекс зависимого).
Теперь то, что я хочу создать, это функция, которая принимает в качестве аргумента int
и список выше. Функция должна искать все кортежи, которые имеют в качестве первого числа целочисленный аргумент и возвращают второе число. Затем функция должна рекурсивно принимать каждое из этих вторых чисел, посмотрите, что такое кортежи, где он отображается как первое число и возвращает второе число. Это должно продолжаться до тех пор, пока другие второстепенные номера не будут восстановлены.
Я буду использовать пример, чтобы объяснить это лучше: предположим, что эта функция принимает в качестве входного числа число 5. Кортежи, имеющие 5 в качестве первого номера, являются (5,6),(5,7),(5,8)
; в качестве первого результата функция затем должна взять 6,7,8 и добавить ее в list
. Теперь функция должна учитывать 6,7,8, искать кортежи, где они отображаются как первые числа ((6,9),(6,10),(7,11)
) и возвращать второе число (9,10,11). Поскольку 8 не отображается как первое число ни в одном из кортежей, его путь заканчивается на этом этапе. Окончательный список должен быть равен [6,7,8,9,10,11]
.
Я пытался что-то подобное, но это не работает:
def foo(start_index, lista_tuples,list_to_return=list()):
indeces=[x[1] for x in lista_tuples if x[0]==start_index]
list_to_return.extend(indeces)
for index in indeces:
foo(index,lista_tuples,list_to_return)
return list_to_return
, но он не работает. Кто-нибудь может мне помочь?
@ inspectorG4dget: Не так ли? 'foo (index, lista_tuples, list_to_return)' –
Кажется, работает для меня. Можете ли вы добавить полный нерабочий пример? –
Это, похоже, работает на меня: 'foo (5, [(1,2), (2,3), (4,5), (5,6), (5,7), (5,8), (6,9), (6,10), (7,11), (12,14)]) 'возвращает' [6,7,8,9,10,11] 'так же, как вы говорите. –