2016-10-03 8 views
2

混乱した後(おそらく、間違った質問が私の側で聞いている間違った原因ではない場合)、次の操作を実行するコードをどのように達成するかを試してみたいと思います。回の:リスト内のiに対して繰り返し - n回

def 1_level: 
    for i in list: 
     for j in i: 
      mylist.append(i) 

def 2_levels: 
    for i in list: 
     for j in i: 
      for k in j: 
       mylist.append(k) 

def 3_levels: 
    for i in list: 
     for j in i: 
      for k in j: 
       for l in k: 
        mylist.append(l) 

def 4_levels: 
    for i in list: 
     for j in i: 
      for k in j: 
       for l in k: 
        for m in l: 
         mylist.apend(m) 

def 5_levels: 
    for i in list: 
     for j in i: 
      for k in j: 
       for l in k: 
        for m in l: 
         for n in m: 
          mylist.append(n) 

私の考えは以下の通りです:

def prunelist(n,mylist): 
    if n > 0:       # if n has not been reached 
     for i in mylist: 
      templist = []    #create blank list for appended items 
      for j in i: 
       templist.append(j)  #append items one branch down 
      mylist = templist   #overwrite original list 
      n -= 1      #reduce n by 1 
      prunelist(n,mylist)  #perform operation again (assuming n >0) 

    else: 
     return mylist    #when n is exhausted, output list 

outputlist = prunelist(n,mylist)  #perform operation 

(より多くのとりとめのない説明は編集を参照してください!!!)

乾杯

J-P

+1

あなたは、入力と出力の例を与えることができますか? –

+0

サンプル入力と必要な出力を共有してください –

+1

@pokeこれはここで尋ねられるものではないと思います。 –

答えて

2

あなたのprunelist機能ではほとんどがあった、ちょうどいくつかの問題があります。

  • はあなたが単にmylist = templistをすることによって渡されたリストを上書きすることはできません。これにより、変数mylistは変更されますが、元の変数は変更されません。ここで元のリストの内容を置き換えることはできますが、新しいリスト(つまりtemplist)を返すだけの方が良いでしょう。これは、変更されていないmylistを返す他の再帰のケースにも適しています。
  • すべての繰り返しで、mylistを使用すると、前の繰り返しの結果が破棄されます。ループの外でtemplist = []初期化を移動し、同様にreturn prunelist(n, templist)

あなたは、あなたの関数が既に動作することを行う場合は、次の

def prunelist(n, mylist): 
    if n > 0: 
     templist = [] 
     for i in mylist: 
      for j in i: 
       templist.append(j) 
     return prunelist(n - 1, templist) 
    else: 
     return mylist 
+0

私はこれを明日チェックしなければならないでしょうが、一見すると、これは優秀に見えます。私には大きな信仰があります。 あまりにも感謝して、物事の説明のための乾杯。 – Jup

+0

完璧に動作します! 私は1つの質問を持っています... templunistがprunelist関数に渡されるとき。これには、 'prunelist(def prunelist(n、mylist)の定義に定義されているbengによって、' mylist 'という名前が割り当てられていますか?) – Jup

+0

はい、他の関数呼び出しの実行スコープでは、外側の 'templist'の値です。これらのスコープはお互いに干渉しません。 – poke

関連する問題