мне нужно рассчитать среднее значение некоторых значений полей и игнорировать никакие значения из расчета, что я мог бы сделать
@api.multi
def update_bar(self):
list=[self.item.pro, self.drc.pro, self.dsc.pro, self.org.pro,
self.car.pro, self.model.pro, self.year.pro]
for rec in list:
if rec:
self.new_list = list.append(rec)
print(self.new_list)
pass
это займет много времени и заморозит компьютер, я проверяю его с помощью кнопки в представлении формы odoo, у меня более 5000 продуктов.
Пожалуйста, обновите свой вопрос с дополнительной информацией. Например, во всем, что я могу прочитать сейчас, я не вижу никакого отношения к Odoo, кроме того декоратора, который ничего не значит в правильном контексте.






Я бы сделал это, используя понимание списка
def average_or_none(ls):
temp = [x for x in ls if x is not None]
if temp:
return sum(temp) / len(temp)
else:
return None
извините, дорогой, но как использовать ваш метод в моем коде, я новичок в python
Спасибо, дорогая, это сработало. Хорошо, и удалите все нули, но, возможно, я не смог определить свою проблему, а также все, что мне нужно, а не просто Удалить значение = Нет значений выше, это одно-много полей, которые мне нужны, если я не выбрал какую-либо запись в поле никогда рассчитывается в список, но если я получаю запись в поле, добавляю ее в список, даже если она равна 0
Вы можете отфильтровать значения None из списка и продолжить обычное суммирование/вычисление среднего значения. Давайте отфильтруем None, как показано ниже:
list=[self.item.pro, self.drc.pro, self.dsc.pro, self.org.pro,
self.car.pro, self.model.pro, self.year.pro]
list_without_none = [x for x in list if x is not None]
Для расчета среднего, Допустим, у вас есть значения, как показано ниже.
# Python program to get average of a list
def Average(lst):
return sum(lst) / len(lst)
# Driver Code
list_without_none = [15, 9, 55, 41, 35, 20, 62, 49]
average = Average(list_without_none)
print(average)
УЗНАТЬ БОЛЬШЕДЕМО
Спасибо, дорогая, это сработало. Хорошо, и удалите все нули, но, может быть, я не смог определить свою проблему, а все, что мне нужно, не просто Удалить значение = Нет значений выше, это одно-много полей, которые мне нужны, если я не выбрал какую-либо запись в поле никогда рассчитывается в список, но если я получаю запись в поле, добавляю ее в список, даже если она равна 0
Вы всегда можете использовать функцию фильтра. Пример ниже. В результате вы получите свой первый список, но с отфильтрованными значениями None.
new_list = filter(lambda x: x is not None, list)
mean = sum(new_list)/len(new_list)
В чем проблема ? Ваше решение должно работать хорошо.