我有一个类似的列表:
trial_lst = [0.5, 3, 6, 40, 90, 130.8, 129, 111, 8, 9, 0.01, 9, 40, 90, 130.1, 112, 108, 90, 77, 68, 0.9, 8, 40, 90, 92, 130.4]
该列表代表一系列实验,每个实验都有最小和最大索引。例如,在上面的列表中,最小值和最大值如下:
Experiment 1:
Min: 0.5
Max: 130.8
Experiment 2:
Min: 0.01
Max: 130.1
Experiment 3:
Min: 0.9
Max: 103.4
我获得了上述每个实验的值,因为我知道每个实验 实验从零开始(例如0.4,0.001,0.009等)开始,到130左右结束(130,131.2,130.009等)。你可以想象一个喷嘴打开和关闭。当它打开时,压力上升,当它关闭时,压力下降。我正在尝试计算每个实验的最小值和最大值。
我到目前为止所尝试的是迭代列表,首先将每个索引标记为最大值,但我似乎无法做到这一点。
这是我的代码。关于我如何改变它的任何建议?
for idx, item in enumerate(trial_lst):
if idx > 0:
prev = trial_lst[idx-1]
curr = item
if prev > curr:
result.append((curr, "max"))
else:
result.append((curr, ""))
我正在寻找一种手动方式来做到这一点,没有图书馆。
答案 0 :(得分:1)
您可以使用以下方法轻松获取最小值的索引:
my_list.index(min(my_list))
答案 1 :(得分:1)
以下是一个可能有所帮助的互动演示:
>>> trial_lst = [0.5, 3, 6, 40, 90, 130.8, 129, 111, 8, 9, 0.01, 9, 40, 90, 130.1, 112, 108, 90, 77, 68, 0.9, 8, 40, 90, 92, 130.4]
使用低于1的值来确定一个实验结束的位置和另一个实验的开始
>>> indices = [x[0] for x in enumerate(map(lambda x:x<1, trial_lst)) if x[1]]
将列表分成这些值的子列表
>>> sublists = [trial_lst[i:j] for i,j in zip([0]+indices, indices+[None])[1:]]
计算每个子列表的最大/最小值
>>> for i,l in enumerate(sublists):
... print "Experiment", i+1
... print "Min", min(l)
... print "Max", max(l)
... print
...
Experiment 1
Min 0.5
Max 130.8
Experiment 2
Min 0.01
Max 130.1
Experiment 3
Min 0.9
Max 130.4
答案 2 :(得分:1)
使用最简单的方法(首先对列表或数组进行排序):
trial_lst = [0.5, 3, 6, 40, 90, 130.8, 129, 111, 8, 9, 0.01, 9, 40, 90, 130.1, 112, 108, 90, 77, 68, 0.9, 8, 40, 90, 92, 130.4]
trial_lst.sort(key=float)
for count, items in enumerate(trial_lst):
counter = count + 1
last_object = (counter, trial_lst[count], trial_lst[(len(trial_lst)-1) - count])
print( last_object )