2017-10-15 134 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

相關問題