2017-01-18 12 views
1

学習の練習では、多次元リストをトラバースし、すべての値を1つの関数/ forループに出力するように求められました。Pythonでリストを再帰的にトラバースする

私の脳は、再帰関数がどのように機能すべきかという基本的な問題を抱えていました。私はいくつかのオンラインの例を使って答えを出しましたが、見つかった値で最初のリストに止まります。

ここで私の訓練の間違いは何でしたか?それはあなたがウォーク(L)を呼び出すとき、それは最初のサブリストをチェックし、それがリストであることを発見し(ループのために次の反復に行くからあなたを停止するよう

def walk(l): 
    for v in l: 
     if type(v) is list: 
      return walk(v) 
     else: 
      print(v) 

l = [ 

    [1,2,3], 
    [4,5,6], 
    [7,8,9] 
] 

walk(l) 

>>1 
>>2 
>>3 

答えて

2

、return文を削除します戻り値に達すると、現在の関数の実行が停止し、次の繰り返しにはもう戻りませんが、walk([1,2,3])を実行して結果を出力します):

def walk(l): 
    for v in l: 
     if type(v) is list: 
      walk(v) 
     else: 
      print(v) 

walk(l) 
1 
2 
3 
4 
5 
6 
7 
8 
9 
+0

ああ!私がオンラインで見つけたほとんどの再帰関数の例は戻り値を持っていましたが、今ここで意味が分からないのがわかります – Mojimi

+0

はい。しかしここではあなたの例では、副作用のためだけに使用しています。何も返す必要はありません。 – Psidom

関連する問題