【问题标题】:how to append fields values in python list and ignore None value如何在python列表中附加字段值并忽略无值
【发布时间】:2023-03-08 00:25:02
【问题描述】:

我需要计算某些字段值的平均值并忽略计算中的任何值,这就是我可以做的

@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 有任何关系,除了那个装饰器,这意味着没有适当的上下文。

标签: python python-3.x odoo odoo-11


【解决方案1】:

我会使用列表理解来做到这一点

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 新手
  • 谢谢亲爱的,它运行良好并删除所有零,但可能我无法定义我的问题以及所有我需要的不仅仅是删除值 = 如果我没有,上面的值是 one2many 我需要的字段t 选择该字段的任何记录从未计算到列表中,但如果我将记录添加到该字段中,则将其添加到列表中,即使它为 0
【解决方案2】:

您可以随时使用过滤功能。下面的例子。结果,您将获得第一个列表,但过滤掉了无。

new_list = filter(lambda x: x is not None, list)
mean = sum(new_list)/len(new_list)

【讨论】:

    【解决方案3】:

    您可以从列表中过滤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)
    

    查看更多 DEMO's

    【讨论】:

    • 谢谢亲爱的,它运行良好并删除所有零,但可能我无法定义我的问题以及所有我需要的不仅仅是删除值 = 如果我没有,上面的值是 one2many 我需要的字段t 选择该字段的任何记录从未计算到列表中,但如果我将记录添加到该字段中,则将其添加到列表中,即使它为 0
    猜你喜欢
    • 2020-09-22
    • 2021-08-24
    • 2021-04-19
    • 2020-10-08
    • 1970-01-01
    • 2015-12-06
    • 1970-01-01
    • 2023-02-02
    • 2020-07-11
    相关资源
    最近更新 更多