Я пытаюсь отсканировать вложенный список с помощью рекурсии (код ниже). Это работает нормально, если вложенный список заканчивается списком. Пример (python 3):

ok = [1,2,3,4,[5,6]] works fine i.e. output is 1 2 3 4 5 6
nok = [1,2,3,4,[5,6],7] does not print the "7". i.e. output is 1 2 3 4 5 6

Вероятно, есть более эффективные способы выравнивания вложенного списка. Я просто пытаюсь понять, чего мне здесь не хватает, то есть где "7"?

def print_list (x):
    for i in x:
        if isinstance (i, list):
            return (print_list(i))
        else:
            print (i)

def main():
    a=[1,2,3,4,[5,6],7]
    print_list (a)

if __name__ == "__main__":
    main()
0
Lschweitzer 11 Янв 2017 в 17:03

3 ответа

Лучший ответ

Вы вернетесь прежде, чем достигнете последнего элемента (7) вашего внешнего списка:

print_list(i)

Вместо

return (print_list(i))

Стоит сделать. return сразу же завершает функцию!

1
schwobaseggl 11 Янв 2017 в 14:07

Удаление return заставляет его работать.

def print_list (x):
    for i in x:
        if isinstance (i, list):
           print_list(i)
        else:
            print (i)

def main():
    a=[1,2,3,4,[5,6],7]
    print_list (a)

if __name__ == "__main__":
    main()
0
Emily 11 Янв 2017 в 14:07

Просто удалите return, все будет работать нормально.

def print_list (x):
    for i in x:
        if isinstance (i, list):
            print_list(i)
        else:
            print (i)

def main():
    a=[1,2,3,4,[5,6],7]
    print_list (a)

if __name__ == "__main__":
    main()

Выход:

1
2
3
4
5
6
7
0
Dmitry 11 Янв 2017 в 14:06