2017-10-15 158 views
0

我有一个列表,看起来像:查找最大值和最小值指数在名单在Python

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等)处结束。你可以想象一个喷嘴打开和关闭。当它打开时,压力上升,当它关闭时,压力下降。我正在尝试计算每个实验的最小值和最大值。

我到目前为止所尝试的是遍历列表首先将每个索引标记为max,但我似乎无法得到正确的结果。

这是我的代码。关于如何改变它的任何建议?

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

'MAX((A,I)为(i,a)in enumerate(trial_lst))''''和'min((a,i)for(i,a)in enumerate(trial_lst))'会给你最大/最小值及其索引,但我不看看实验是如何相关的。 – jq170727

+0

感谢您的建议,但这只会返回最小值和索引 – natalien

+0

您问题的标题与您要求的标题不符。此外,您的名单中的不同实验在哪里? –

回答

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) 
+0

哇!谢谢!! – natalien

+0

这是不正确的。它不保持最大值的顺序。例如,它将第一个周期的最大值打印为130.4,而不是130.8 – Dunes

+0

@Dunes:LOL ...因为0.01!我没有看到,没问题只是改变key = int key = float! – DRPK

1

可以使用很容易得到的最小值的指标如下:

my_list.index(min(my_list)) 
+0

谢谢,但这只返回最小值。我期待为每个实验返回多个最大值和最小值。实验从0开始到130左右结束,所以我想通过比较每个元素来计算出最大值和最小值的计算方法......但无济于事。 – natalien

+0

“多个最大值和最小值”是什么意思? –

+0

我的意思是这个列表是由多个实验组成的。每个都有一个最小值和一个最大值。 – natalien

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]] 

在那些v中将子列表分解成子列表alues

>>> 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 
+0

我没有想到将它分解成子列表。这真的很有帮助,谢谢! – natalien

相关问题