在Python中查找列表中的最大和最小索引

时间:2017-10-15 20:55:49

标签: python list max

我有一个类似的列表:

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, ""))

我正在寻找一种手动方式来做到这一点,没有图书馆。

3 个答案:

答案 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 )