2016-10-03 4 views
2

После некоторого смятения (возможно, если не определенно вызвано неправильным вопросом с моей стороны), я пытаюсь работать, как добиться кода для выполнения следующей операции, но n число раз:Повторите для 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

Работает отлично! У меня есть один вопрос, хотя ... Когда templist передается функции прунелиста. Это тогда присвоено имя «mylist» (в силу этого beng, определенного в определении prunelist (т. Е. Def prunelist (n, mylist)? – Jup

+0

Да, для области выполнения этого другого вызова функции «mylist» имеет значение внешнего 'templist'. Эти области не будут мешать друг другу. – poke

Смежные вопросы