2015-06-29 6 views
1

Я новичок в Python, исходящем от Excel. Я хочу, чтобы в среднем был список, но для каждого нового элемента. Для получения списка:Средняя Итерация по списку

x = [-3.2, 2.7, -8.5, -1.4] 

Я пробовал:

avg = sum(col)/len(col) 

И это дает результат -2.6, который весь столбец делится на весь счет. Я хочу, чтобы он возвращал среднее значение на каждой итерации. Я попытался использовать цикл for:

def avg2(x): 
    ttl = 0 
    for i in x: 
     ttl += i 
     res = ttl/len(x) 
    return res 

Такой же результат, вся сумма/вся колонка. Он проходит через весь список, а не итоговые значения для каждого значения. В качестве эталона формула первенствует бы (для чисел в столбце A):

=AVERAGE(A$1:A4) 

При перетаскивании формулы вниз до А5, то результат будет за все в этой итерации.

Возможно, используя перечисление или цикл в цикле?

+0

ли вы имеете в виду для элемента 2, вам нужно в среднем до этого? –

+0

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

+0

Что вы подразумеваете под средним здесь? – user2738777

ответ

0

Вы не спасаете свой результат в любом месте во время цикла. вы только вернуть его в конце, так что это, почему вы получаете эти результаты:

def avg2(x): 
    res = [] 
    total = 0 
    for i in x: 
     total += i 
     res.append(total/len(x)) 
    return res 

приведет к:

>>> x = [-3.2, 2.7, -8.5, -1.4] 
>>> avg2(x) 
[-0.8, -0.125, -2.25, -2.6] 

Обратите внимание, что это усредняет total по длине всего списка не количество значений, которые были усреднены до сих пор. Например, когда он усредняет -0.125 делает -0.925/4 не -0.925/ 2. Для достижения этой цели вы можете использовать enumerate и это необязательно start параметр, чтобы избежать деления на 0:

def avg2(x): 
    res = [] 
    total = 0 
    for idx, i in enumerate(x, 1): 
     total += i 
     res.append(total/idx) 
    return res 
+0

Спасибо, IanAuld за решение и шаги, которые вы использовали для этого. – noblerthanoedipus

2

Ваша средняя функция:

def avg(lst): return sum(lst)/len(lst) 

В основном вы хотите применить avg() к ломтиков x. Просто для ясности, ломтики x являются:

>>> x[:1] 
[-3.2] 
>>> x[:2] 
[-3.2, 2.7] 
>>> x[:3] 
[-3.2, 2.7, -8.5] 

Нанесите его на ломтики x, используя список понимание:

>>> [avg(x[:i]) for i in range(1,len(x)+1)] 
[-3.2, -0.25, -3.0, -2.6] 
+0

Спасибо за ваше решение mescalinum. Я предпочитаю использовать ответ IanAuld, но это тоже здорово. – noblerthanoedipus

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