Le max d'une liste de nombre réelle négative

Résolu
nournina Messages postés 52 Date d'inscription dimanche 27 octobre 2013 Statut Membre Dernière intervention 17 juin 2014 - Modifié par nournina le 31/05/2014 à 22:21
nournina Messages postés 52 Date d'inscription dimanche 27 octobre 2013 Statut Membre Dernière intervention 17 juin 2014 - 5 juin 2014 à 22:04
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
A voir également:

1 réponse

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
1 juin 2014 à 01:58
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.



0
nournina Messages postés 52 Date d'inscription dimanche 27 octobre 2013 Statut Membre Dernière intervention 17 juin 2014 1
1 juin 2014 à 09:57
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
0
YepoMax Messages postés 74 Date d'inscription samedi 8 décembre 2012 Statut Membre Dernière intervention 14 juin 2014 20
1 juin 2014 à 11:54
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
0
nournina Messages postés 52 Date d'inscription dimanche 27 octobre 2013 Statut Membre Dernière intervention 17 juin 2014 1
1 juin 2014 à 12:47
merci bien monsieur maintenant ça marche bien
mais comment afficher l'indice de ce nombre maximum
0
YepoMax Messages postés 74 Date d'inscription samedi 8 décembre 2012 Statut Membre Dernière intervention 14 juin 2014 20
Modifié par YepoMax le 5/06/2014 à 01:45
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 !
0
nournina Messages postés 52 Date d'inscription dimanche 27 octobre 2013 Statut Membre Dernière intervention 17 juin 2014 1
5 juin 2014 à 22:04
merci bien monsieur
maintenant mon problème est résolue
merci
0
Rejoignez-nous