Python嵌套列表:递归似乎过早停止

时间:2017-01-11 14:03:35

标签: python list recursion nested

我试图通过递归扫描嵌套列表(下面的代码)。如果嵌套列表以列表停止,则此方法正常。 示例(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()

3 个答案:

答案 0 :(得分:1)

在到达外部列表的最后一个元素(7)之前返回:

print_list(i)

而不是

return (print_list(i))

应该这样做。 return在那里结束了这个功能!

答案 1 :(得分:0)

只需删除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

答案 2 :(得分:0)

删除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()