如何从一个列表中找到最大和最小读数,并从另一个列表中找到max和min的相应日期(使用python 3.4)?

时间:2018-01-02 23:02:49

标签: python list

我有两个列表,如下所示。

reading = [4.19, 4.28, 6.90, 0.00, 8.26, 13.14, 11.75, 0.00, 16.83, 16.47, 15.26, 14.88]
day = [0, 1, 2, 3, 4, 7, 8, 9, 11, 12, 13, 14, 15]

我想从“阅读”列表中找到最大和最小读数。同时我还需要从列表“日”中找到最大值和最小值的相应日期。列表“阅读”的长度是12而列表“日”的长度是13.相应的阅读日4.19是第1天,它表示从列表的第二个元素(日)开始阅读的日计数。我试过下面的代码来找到最小值和最大值。但我对代码感到困惑,找出最小值和最大值的相应日期。对于上述问题的任何帮助将不胜感激。

我试图找到max和min的代码如下:

print ("Minimum reading is:", "%6.2f" % min(reading))
print ("maximum reading is:", "%6.2f" % max(reading))

所以可能的输出如下:

Minimum reading is:   0.00
Corresponding Min Day is:  4, 11
maximum reading is:  16.83
Corresponding Max day is: 12

3 个答案:

答案 0 :(得分:1)

这是一个numpy解决方案。

>>> import numpy as np
>>> reading = np.array([4.19, 4.28, 6.90, 0.00, 8.26, 13.14, 11.75, 0.00, 16.83, 16.47, 15.26, 14.88])
>>> day = np.array([0, 1, 2, 3, 4, 7, 8, 9, 11, 12, 13, 14, 15])[1:]
>>> 
>>> min_ = np.min(reading)
>>> min_
0.0
>>> day[reading == min_]
array([ 4, 11])
>>> 
>>> max_ = np.max(reading)
>>> max_
16.829999999999998
>>> day[reading == max_]
array([12])

答案 1 :(得分:0)

arg_min = 0
min = reading[arg_min]
for i in range(0,len(reading)):
    if reading[i] < min:
        arg_min = i
        min = reading[i]

之后,arg_min是最小读数的索引...因此它也是具有最小读数的那天的索引。

答案 2 :(得分:0)

这是我将如何做到的:

reading = [4.19, 4.28, 6.90, 0.00, 8.26, 13.14, 11.75, 0.00, 16.83, 16.47, 15.26, 14.88]
day = [0, 1, 2, 3, 4, 7, 8, 9, 11, 12, 13, 14, 15]

min_reading = min(reading)
max_reading = max(reading)
min_days = [str(d) for d, r in zip(day[1:], reading) if r == min_reading]
max_days = [str(d) for d, r in zip(day[1:], reading) if r == max_reading]

print ("Minimum reading is:", "%6.2f" % min(reading))
print ("Corresponding Min Day is:  %s" % ', '.join(min_days))
print ("maximum reading is:", "%6.2f" % max(reading))
print ("Corresponding Max Day is:  %s" % ', '.join(max_days))

注意:

  • 使用内置的max()min()函数查找极值。
  • 由于您可以拥有多个最小值和最大值,因此您需要构建一个列表来保存它们。我使用列表理解来做到这一点。
  • zip()函数确定读数和天数之间的相关性。这使得将读数映射到可能的日子。
  • day[1:]表示有效天数列表,因为day列表的偏移量为1。
  • 可以使用str()构造函数将day值转换为字符串,因为程序随后只需要字符串。如果真正的程序稍后需要整数值,那么这将不起作用。

如果我必须在一次传递中执行此操作(例如,因为数据集非常大或者因为它是作业要求),我会编写自己的循环而不是调用min()和{{1 }}:

max()