2016-02-21 2 views
2

У меня есть часть кода, которая отлично работает, но вместо того, чтобы печатать результаты один за другим, я хочу добавить их в список и вместо этого вернуть список. Я пробовал все, что мог придумать, но потерпел неудачу. Пожалуйста помоги.Не удается вернуть список.

def calc_averages(): 

    allprices = [ ['','','', '' ,1.0 ,2.0 ,1.2 ,1.3 ,1.1 , '', '',''],\ 
       ['','','' ,1.2 ,1.0 ,2.0 ,1.2 ,1.3 ,1.1 , '', '', ''],\ 
       ['','','' ,1.2, '' ,1.8 ,1.3 ,1.1 , '', '', '', ''],\ 
       ['','','', '' ,1.0 ,2.0 ,1.2 ,1.2 , '', '', '', ''],\ 
       ['','','', '' ,1.0 ,2.0 ,1.1 ,1.2 ,1.4 ,1.8 ,1.9 ,2.2] ] 

    averages = [] 
    for lst in range(0,12): 
     counter = 0 
     total = 0 
     for item in allprices: 
      if item[lst] != '': 
       total = total + item[lst] 
       counter = counter + 1 
     if counter == 0: 
      print('') 
     else: 
      print(total/counter) 

Я хочу вернуть список средних значений после добавления в него значений, но возвращает их как пустой список.

+0

Вы должны убедиться, отступы в вашем коде верны или невозможно отладить. – wpercy

+0

Это ничего не возвращает. Вам нужно явно вернуть значение. Else 'None' возвращается – karthikr

+0

« Я пробовал все, что мог придумать »? Вы говорите, что хотите добавить их в список и вернуть это вместо этого - попытались ли вы добавить список в список и вернуть его? Я не вижу добавления или возврата в вашу функцию ... – kindall

ответ

3

Вы не присоединять к среднему или вернуть его на всех

def calc_averages(): 

    allprices = [['','','', '' ,1.0 ,2.0 ,1.2 ,1.3 ,1.1 , '', '',''], 
       ['','','' ,1.2 ,1.0 ,2.0 ,1.2 ,1.3 ,1.1 , '', '', ''], 
       ['','','' ,1.2, '' ,1.8 ,1.3 ,1.1 , '', '', '', ''], 
       ['','','', '' ,1.0 ,2.0 ,1.2 ,1.2 , '', '', '', ''], 
       ['','','', '' ,1.0 ,2.0 ,1.1 ,1.2 ,1.4 ,1.8 ,1.9 ,2.2]] 


    averages = [] 
    for outer in allprices: 
     counter = 0 
     total = 0 
     for item in outer: 
      if item != '': 
       total += item 
       counter += 1 
     if counter == 0: 
      print('') 
     else: 
      averages.append(total/counter) 
    return averages 

print(calc_averages()) 

Выход

[1.3199999999999998, 1.3, 1.35, 1.35, 1.5750000000000002] 
+0

Он только вернул 1 элемент в списке средних значений. Должно быть 9. –

+0

Ваш средний расчет был неправильным, также вам не нужно перебирать 'range (0, 12)', так как вы знаете, что ваш список вложен, вы можете повторять его дважды, и там должно быть пять результатов не 9 (у вас есть пять вложенных списков) – danidee

+0

Ну, я пытаюсь вычислить среднее значение n-й цены в каждом списке, поэтому вычисление действительно для 4-го значения в каждом списке, которое равно (1.2 + 1.2)/2 с первого, четвертый и пятый списки «4-й элемент» - это пустые строки, которые они не учитывают. Таким образом, мой средний расчет был правильным, и теперь я все работаю, вычисляя и возвращаю список средних значений. спасибо –

0

Просто добавьте значения в список averages:

import statistics 

def calc_averages(): 
    allprices = [['','','', '' ,1.0 ,2.0 ,1.2 ,1.3 ,1.1 , '', '', ''], 
      ['','','' ,1.2 ,1.0 ,2.0 ,1.2 ,1.3 ,1.1 , '', '', ''], 
      ['','','' ,1.2, '' ,1.8 ,1.3 ,1.1 , '', '', '', ''], 
      ['','','', '' ,1.0 ,2.0 ,1.2 ,1.2 , '', '', '', ''], 
      ['','','', '' ,1.0 ,2.0 ,1.1 ,1.2 ,1.4 ,1.8 ,1.9 ,2.2]] 
    averages = [] 
    for prices in zip(*allprices): 
     try: 
      averages.append(statistics.mean(p for p in prices if p!='')) 
     except statistics.StatisticsError: 
      averages.append('') 
    return averages 
Смежные вопросы