2017-10-15 7 views
0

j'ai une liste qui ressemble à:Trouver des indices max et min dans les listes en 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] 

La liste représente une série d'expériences, chacun avec un minimum et un indice maximum. Par exemple, dans la liste ci-dessus, le minimum et le maximum seraient les suivantes:

Experiment 1: 
Min: 0.5 
Max: 130.8 

Experiment 2: 
Min: 0.01 
Max: 130.1 

Experiment 3: 
Min: 0.9 
Max: 103.4 

I obtenu les valeurs pour chaque expérience ci-dessus parce que je sais que chaque expérience commence à autour de zéro (par exemple 0,4, 0,001, 0,009, etc.) et se termine à environ 130 (130, 131,2, 130,009, etc.). Vous pouvez imaginer une buse allumée et éteinte. Quand il s'allume, la pression augmente et quand il est éteint, la pression baisse. J'essaie de calculer les valeurs minimales et maximales pour chaque expérience. Ce que j'ai essayé jusqu'ici est d'itérer dans la liste pour marquer d'abord chaque index comme max, mais je ne peux pas sembler avoir raison.

Voici mon code. Des suggestions sur comment je peux le changer? Je recherche une manière manuelle de faire ceci, aucune bibliothèque.

+0

'max ((a, i) (i, a) dans enumerate (trial_lst)) et min ((a, i) pour (i, a) dans enumerate (trial_lst)) 'vous donnera les valeurs max/min et leurs indices mais je ne sais pas voyez comment les expériences sont liées. – jq170727

+0

Merci pour la suggestion, mais cela ne renvoie que la valeur min et son index – natalien

+0

Le titre de votre question ne correspond pas à ce que vous demandez. Aussi, où sont les dénominations dans votre liste pour les différentes expériences ??? –

Répondre

1

Utilisez la meilleure façon (trier votre liste ou un tableau en premier):

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

ouah! Je vous remercie!! – natalien

+0

Ceci est incorrect. Il ne maintient pas l'ordre des valeurs maximales. Par exemple, il imprime ce maximum de la première période comme 130.4 plutôt que 130.8 – Dunes

+0

@Dunes: LOL ... c'est à cause de 0.01! Je n'ai pas vu ça, pas de problème change juste key = int à key = float! – DRPK

1

Vous pouvez facilement obtenir l'indice de la valeur minimale en utilisant:

my_list.index(min(my_list)) 
+0

merci, mais cela ne renvoie que la valeur minimale. Je cherche à retourner plusieurs valeurs max et min pour chaque expérience.Les expériences commencent autour de 0 et se terminent autour de 130, donc j'essaie de trouver un moyen de calculer max et min en comparant chaque élément ... mais en vain. – natalien

+0

Qu'entendez-vous par «valeurs multiples max et min»? –

+0

Je veux dire que la liste est composée de plusieurs expériences. Chacun avec une valeur min et une valeur max. – natalien

1

Voici une démonstration interactive qui peut aider:

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

Utilisez des valeurs inférieures à 1 pour identifier où une expérience se termine et une autre commence

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

Pause liste en sous-listes à ceux v aleurs

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

Compute max/min pour chaque sous-liste

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

Je n'ai pas pensé à le casser en sous-listes. C'est vraiment utile, merci! – natalien