2017-01-11 1 views
0

再帰(ネストされたリスト)をスキャンしようとしています。ネストされたリストがリストで停止すると、これはうまく動作します。 例(のpython 3):Pythonのネストされたリスト:再帰があまりに早く停止するようです。

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() 
+4

'return'文を削除するには、唯一のあなたはそれを削除するループを終了したくない場合は、return文は、forループを破る –

+0

リスト要素を印刷する必要がある場合、それが動作するはずです。 –

答えて

1

あなたが外リストの最後の要素(7)に達する前に、あなたが返す:

print_list(i) 

代わりの

return (print_list(i)) 

を行う必要があります。 returnはすぐに機能を終了します!

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 
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() 
関連する問題