我有两个列表,如下所示。
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
答案 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()