2017-10-15 7 views
0

Ich habe eine Liste, die wie folgt aussieht:Finding maximaler und minimaler Indizes in Listen in 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] 

Die Liste eine Reihe von Experimenten darstellen, die jeweils mit einem Minimum und einem Maximum-Index. Zum Beispiel oben in der Liste, die minimale und maximale würden wie folgt aussehen:

Experiment 1: 
Min: 0.5 
Max: 130.8 

Experiment 2: 
Min: 0.01 
Max: 130.1 

Experiment 3: 
Min: 0.9 
Max: 103.4 

erhielt ich die Werte für jedes Experiment oben, weil ich weiß, dass jedes Experiment bei etwa Null beginnt (wie 0,4, 0,001, 0,009 usw.) und endet bei etwa 130 (130, 131,2, 130,009 usw.). Sie können sich vorstellen, dass sich eine Düse ein- und ausschaltet. Wenn es angeschaltet wird, steigt der Druck und wenn er ausgeschaltet wird, sinkt der Druck. Ich versuche, die minimalen und maximalen Werte für jedes Experiment zu berechnen.

Was ich bis jetzt versucht habe, besteht darin, die Liste zu durchlaufen, um zuerst jeden Index als Maximum zu markieren, aber ich kann nicht scheinen, das richtig zu machen.

Hier ist mein Code. Irgendwelche Vorschläge, wie ich das ändern kann?

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

Ich bin auf der Suche nach einem manuellen Weg, um dies zu tun, keine Bibliotheken.

+0

'max ((a, i) für (i, a) in enumerate (trial_lst)) 'und' min ((a, i) für (i, a) in enumerate (trial_lst)) 'gibt Ihnen die Max/Min-Werte und ihre Indizes, aber ich nicht Sehen Sie, wie die Experimente zusammenhängen. – jq170727

+0

Vielen Dank für den Vorschlag, aber das liefert nur den Wert min und seinen Index – natalien

+0

Der Titel Ihrer Frage stimmt nicht mit dem überein, was Sie fragen. Auch, wo sind die Bezeichnungen in deiner Liste für die verschiedenen Experimente ??? –

Antwort

1

Verwenden Sie die einfachste Art und Weise (sortieren Sie Ihre Liste oder Array zuerst):

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

wow! Danke!! – natalien

+0

Das ist falsch. Es behält nicht die Reihenfolge der Maximalwerte bei. Zum Beispiel, es druckt das Maximum der ersten Periode als 130.4 statt 130.8 – Dunes

+0

@Dunes: LOL ... es wegen 0.01! Ich habe das nicht gesehen, kein Problem, einfach key = int zu key = float! – DRPK

1

Sie können ganz einfach den Index des Minimalwert erhalten mit dem folgenden:

my_list.index(min(my_list)) 
+0

danke, aber das gibt nur den Minimalwert zurück. Ich suche nach mehreren Max- und Min-Werten für jedes Experiment.Die Experimente beginnen bei 0 und enden bei 130, also versuche ich einen Weg zu finden, Max und Min zu berechnen, indem ich jedes Element vergleiche. Aber ohne Erfolg. – natalien

+0

Was meinst du mit 'multiple max und min Werte'? –

+0

Ich meine, dass die Liste aus mehreren Experimenten besteht. Jeder mit einem minimalen Wert und einem maximalen Wert. – natalien

1

Hier ist eine interaktive Demonstration, die helfen können:

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

Verwenden Sie Werte unter 1, wo ein Experiment zu identifizieren endet und eine neue beginnt

>>> indices = [x[0] for x in enumerate(map(lambda x:x<1, trial_lst)) if x[1]] 

Pause Liste in Teil-Listen auf diejenigen v alues ​​

>>> sublists = [trial_lst[i:j] for i,j in zip([0]+indices, indices+[None])[1:]] 

Compute max/min für jede Teilliste

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

Ich dachte nicht daran, es in Unterlisten zu brechen. das ist wirklich hilfreich, danke! – natalien

Verwandte Themen