Le max d'une liste de nombre réelle négative [Résolu]

Messages postés
52
Date d'inscription
dimanche 27 octobre 2013
Statut
Membre
Dernière intervention
17 juin 2014
-
Bonjour,
j'ai une liste qui contienne des nombre réelle négative, je veut extraire le nombre maximum de cette liste mais ça marche plus avec moi
voici mon code
#! /usr/bin/ python
import string
import os
import sys
c=['-6.86842', '-7.63321', '-10.0671', '-10.6517', '-8.24292', '-9.05002', '-5.50476', '-9.94487', '-11.1206', '-8.73639', '-10.324', '-7.91287', '-10.2546', '-7.49278', '-7.30659', '-7.9931', '-6.8119', '-8.62453', '-10.9082', '-10.9082']
print max(c)


normalement le maximum de cette liste est : -5.50476
mais mon programme m'affiche : -9.94487
et comment je peut avoir leur indice sur la liste
je suis pas ou est le problème, si vous pouvez m'aidez s'il vous plais
merci pour votre collaboration
Afficher la suite 

Votre réponse

1 réponse

Messages postés
25575
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 mai 2019
311
0
Merci
Bonjour,
Je ne fais pas de Python... mais il me semble que écrite comme ça.. ta liste ne soit pas reconnue comme des nombres .. mais comme du texte.



nournina
Messages postés
52
Date d'inscription
dimanche 27 octobre 2013
Statut
Membre
Dernière intervention
17 juin 2014
1 -
merci monsieur pour votre réponse mais quand je fait des nombres entiers positives ou négatives ça marche bien le problème c'est les nombre 'float'
a=['9','5','3','1']
print max(a)

ça me donne une bonne résultat;
merci
YepoMax
Messages postés
75
Date d'inscription
samedi 8 décembre 2012
Statut
Membre
Dernière intervention
14 juin 2014
11 -
Bonjour,

Comme jordane l'a souligné, ce sont des chaines de caractères et non des nombres, leur ordre de grandeurs est donc évalué différemment.

Il vous faut convertir les éléments en nombres d'abord.
Voici comment faire en utilisant "list comprehension"

c=['-6.86842', '-7.63321', '-10.0671', '-10.6517', '-8.24292', '-9.05002', '-5.50476', '-9.94487', '-11.1206', '-8.73639', '-10.324', '-7.91287', '-10.2546', '-7.49278', '-7.30659', '-7.9931', '-6.8119', '-8.62453', '-10.9082', '-10.9082']

print( max( [float(string) for string in c] ) )
# Affiche le bon résultat, c'est à dire -5.50476
nournina
Messages postés
52
Date d'inscription
dimanche 27 octobre 2013
Statut
Membre
Dernière intervention
17 juin 2014
1 -
merci bien monsieur maintenant ça marche bien
mais comment afficher l'indice de ce nombre maximum
YepoMax
Messages postés
75
Date d'inscription
samedi 8 décembre 2012
Statut
Membre
Dernière intervention
14 juin 2014
11 -
Pour trouver l'indice, la méthode facile :

c = ['-6.86842', '-7.63321', '-10.0671', '-10.6517', '-8.24292', '-9.05002', '-5.50476', '-9.94487', '-11.1206', '-8.73639', '-10.324', '-7.91287', '-10.2546', '-7.49278', '-7.30659', '-7.9931', '-6.8119', '-8.62453', '-10.9082', '-10.9082']

print( c.index( str(max( [float(string) for string in c] )) ) )


Cette méthode est lente car on parcoure 2 fois la liste (avec la fonction max et la méthode list.index)
Pour faire plus rapide, écrivons une fonction similaire à 'max' mais qui retroune l'index plutôt que la valeur !

def max_index( List ):
    if len(List):
        Max, max_i = float(List[0]), 0
        for i, elem in enumerate( List ):
            if float(elem) > Max: Max, max_i = float(elem), i
    else: raise ValueError( "max_index() arg is an empty sequence" ) # On génère une erreur exactement comme la fonction max le fait lorsque la liste est vide. Cette ligne n'est pas nécessaire
    return max_i


Voilà, cette fonction retourne l'indice recherché en une seule boucle !
nournina
Messages postés
52
Date d'inscription
dimanche 27 octobre 2013
Statut
Membre
Dernière intervention
17 juin 2014
1 -
merci bien monsieur
maintenant mon problème est résolue
merci
Commenter la réponse de jordane45