列表的平均值

Posted

技术标签:

【中文标题】列表的平均值【英文标题】:Average value of list 【发布时间】:2016-09-24 17:37:08 【问题描述】:

我想编写将在第一次单击时启动 rotorSpeed 秒表然后在第二次单击时将 rotorSpeed.ElapsedMilliseconds 添加到 list 的代码。在第二次单击时重置秒表并再次开始计时,然后在第三次单击时再次将 rotorSpeed.ElapsedMilliseconds 添加到 list。 代码中没有错误,但是当我调试它时,我得到了double average = list.Average();的错误

Stopwatch rotorSpeed = new Stopwatch(); List<double> list = new List<double>();

private void button1_Click(object sender, EventArgs e)

    i++;
    //Getting rotor speed
    if (i != 2)
                   
        if (rotorSpeed.IsRunning)
        
            rotorSpeed.Stop();
            list.Add(rotorSpeed.ElapsedMilliseconds);
            rotorSpeed.Start();                   
        
        else
        
            rotorSpeed.Reset();
            rotorSpeed.Start();
        
    

    double average = list.Average();
    textBox2.Text = average.ToString();

这是我得到的错误:

在 >System.Core.dll 中发生了“System.InvalidOperationException”类型的未处理异常

附加信息:序列不包含任何元素

【问题讨论】:

你遇到了什么错误? 这可能是因为您试图在第一次单击后获得一个没有任何元素的列表的Average。你遇到了什么异常? @pavnik System.Core.dll 中发生“System.InvalidOperationException”类型的未处理异常附加信息:序列不包含任何元素 最后两行用 if (list.Count > 1) 换行 【参考方案1】:

您的list 是空的,因此调用Average() 会引发异常。更改以下行

double average = list.Average();

double average = list.Count > 0 ? list.Average() : 0.0;

【讨论】:

为什么是0.0?您认为可以默默地使用零吗?另一种选择是list.Count &gt; 0 ? list.Average() : double.NaN。空序列的平均值在某种意义上可以说是0.0 / 0.0【参考方案2】:
if (list.Count > 0)

    textBox2.Text = list.Average().ToString();

【讨论】:

计数应大于等于 1。 为什么?平均 1 个元素没有任何意义。 LE:除非那是它需要在文本框中显示的内容。在这种情况下,我想你是对的:) 如果您的列表计数为 1,则不会填充文本框。【参考方案3】:
if (list.Count > 1)

    double average = list.Average();
    textBox2.Text = average.ToString();
    rotorSpeed.Stop();

这很好用。谢谢!

【讨论】:

以上是关于列表的平均值的主要内容,如果未能解决你的问题,请参考以下文章

列表中元素的平均值

计算数组列表的平均值?

计算元组列表中数值的平均值

如何获得数字列表的平均值[重复]

Python:计算具有不同长度的列表列表中第 n 个元素的平均值

将 Python 列表值的平均值转换为另一个列表