0
votes

Méthodes max et min en python, retourne des valeurs incorrectes

Je viens de commencer à Python après une longue absence du langage de programmation et j'écris un programme qui lit à partir d'un fichier pour récupérer des valeurs. Actuellement, j'ai le programme en question à lire dans le fichier et à mettre certaines valeurs dans un tuple, cependant, le problème que je suis maintenant confronté est de retourner les valeurs min et max de ma liste de tuples en Python, la liste des valeurs i Vous avez dans la liste TUPLE:

tuple = ('44.0', '34.0', '17.0', '6.0','15.0') 


3 commentaires

Les valeurs à l'intérieur de votre tuple sont des chaînes, lorsque vous appliquez max sur eux, vous obtenez la chaîne avec le plus grand ordre alphabétique. Convertissez-les en chiffres en premier.


@Rakesh the lambda emballage float est superflu.


@snakecharmerb a trouvé que l'un aussi - mais il s'agit de tri, pas min / max bien que les solutions soient similaires


6 Réponses :


7
votes

comparaisons sur les chaînes sont lexicographique , par défaut. Cela signifie que "9" est lexicographiquement supérieur à "10", car la valeur ASCII de "9" (9 "(57) est supérieure à la valeur ASCII de" 1 "(49), etc.

Si vous voulez Comparez ces valeurs de chaîne par leur valeur numérique réelle, vous devrez transmettre une touche sur max / min : xxx

Bien sûr, cela nécessite toutes vos valeurs de tuple pour être une représentation de chaîne des flotteurs / INTS. Si vous avez une chaîne non numérique ('ABC', par exemple), cela ne va pas fonctionner.


0 commentaires

3
votes

Vous obtenez "6.0" comme valeur maximale car vous comparez des chaînes et non des entiers / flotteurs.

Les comparaisons de chaîne sont lexicographiques, et vous obtenez donc "6.0" comme valeur maximale. < P> Vous pouvez transmettre un paramètre clé de sorte que les comparaisons soient arithmétiques et non lexicographiques, comme ceci: xxx


0 commentaires

1
votes

Les éléments de tuple sont des chaînes, vous pouvez donner une fonction clé à max et min: xxx


0 commentaires

1
votes

Vous pouvez soit transmettre la clé à Min ou Max, comme indiqué par d'autres ou que vous pouvez Carte CODE> TUPLE à Floatts

t = ('44.0', '34.0', '17.0', '6.0','15.0')
print(min(map(float,t))) #prints 6.0
print(max(map(float,t))) #prints 44.0


0 commentaires

1
votes

Les valeurs de votre tuple sont définies comme chaîne code>. Si vous voulez qu'ils soient traités comme float code>, n'utilisez pas les parenthèses lorsque vous définissez le tuple:

myTuple = (44.0, 34.0, 17.0, 6.0, 15.0)

print(min(myTuple)) # 6.0

print(max(myTuple))  #44.0


0 commentaires

0
votes

La raison pour laquelle vous obtenez des résultats étranges est que les éléments de la variable TUPple sont toutes des chaînes et une comparaison de chaîne fonctionne différemment de la comparaison de nombre. Dans la comparaison des chaînes, le premier élément de chaque élément de chaîne est utilisé pour le premier passage de la comparaison. Donc, dans le cas de TUPple, la comparaison serait entre ces éléments ('4', '3', '1', '6', '6', '1') . Prendre le maximum de ceux-ci donnerait "6" qui est le maximum (mais représente "6,0" dans le tulple d'origine) et le minimum serait "1" (le dernier 1 "qui représente 15.0).

Pour éviter cela, vous Devrait d'abord convertir les valeurs de chaîne en floattes et prendre le max et la min comme vous le souhaitez ... xxx


0 commentaires