Вставка поэлементного среднего вложенного списка в тот же список - PullRequest
0 голосов
/ 28 марта 2019

Предположим, есть список вложенных списков с плавающей точкой

L = [[a,b,c],[e,f,g],[h,i,j]]

Какую функцию я могу определить, чтобы выполнить итерацию по списку один раз и вставить среднее значение элементов каждого последовательного списка в один и тот же список?Т.е. я хочу получить

L1 = [[a,b,c],[(a+e)/2,(b+f)/2,(c+g)/2],[e,f,g],[(e+h)/2,(f+i)/2,(g+j)/2],[h,i,j]]

Я знаю функцию для получения среднего по элементам двух списков:

from operator import add
new_list = list(map(add,list1,list2))
J = [j/2 for j in new_list]

Однако вставка этого списка средних значений обратно в тот же список покаподдержание правильной итерации индекса по старому списку оказалось сложной задачей.

1 Ответ

1 голос
/ 28 марта 2019

Есть два случая:

  1. Вам все равно, если итоговый список будет таким же:
new_list = []
for i in range(len(L)-1):
    new_list.append(L[i])
    new_list.append(list(map(lambda x: sum(x)/len(x), zip(L[i],L[i+1]))))
new_list.append(L[-1])
  1. Вы хотите, чтобы изменения были выполнены на месте:
i=0
while i < len(L)-1:
    new_elem = list(map(lambda x: sum(x)/len(x), zip(L[i],L[i+1])))
    L.insert(i+1, new_elem)
    i += 2

РЕДАКТИРОВАТЬ: Если вы используете Python 3.4 или выше, вместо lambda x: sum(x)/len(x) вы можете использовать mean(x) (из пакета statistics).

...