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

nournina 52 Messages postés dimanche 27 octobre 2013Date d'inscription 17 juin 2014 Dernière intervention - 31 mai 2014 à 22:07 - Dernière réponse : nournina 52 Messages postés dimanche 27 octobre 2013Date d'inscription 17 juin 2014 Dernière intervention
- 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
Afficher la suite 

Votre réponse

6 réponses

jordane45 21449 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 24 juin 2018 Dernière intervention - 1 juin 2014 à 01:58
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 52 Messages postés dimanche 27 octobre 2013Date d'inscription 17 juin 2014 Dernière intervention - 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
YepoMax 75 Messages postés samedi 8 décembre 2012Date d'inscription 14 juin 2014 Dernière intervention - 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
nournina 52 Messages postés dimanche 27 octobre 2013Date d'inscription 17 juin 2014 Dernière intervention - 1 juin 2014 à 12:47
merci bien monsieur maintenant ça marche bien
mais comment afficher l'indice de ce nombre maximum
YepoMax 75 Messages postés samedi 8 décembre 2012Date d'inscription 14 juin 2014 Dernière intervention - 5 juin 2014 à 01:35
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 52 Messages postés dimanche 27 octobre 2013Date d'inscription 17 juin 2014 Dernière intervention - 5 juin 2014 à 22:04
merci bien monsieur
maintenant mon problème est résolue
merci
Commenter la réponse de jordane45

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.