max(iterable, *[, default=obj, key=func]) -> value
max(arg1, arg2, *args, *[, key=func]) -> value
Soit vous travaillez dans le contenu d'une collection qui peut être parcourue via une bouble for
(list
, tuple
, set
...).
En Python, on parle souvent d' « itérable » pour qualifier une telle collection.
>>> data = [50, 10, 30, 60, 40, 20] >>> m = max(data) >>> m 60 >>>
Soit vous travaillez dans un ensemble quelconque d'arguments lors de l'appel de la méthode.
>>> m = max(50, 10, 30, 60, 40, 20) >>> m 60 >>> m = max(50, 10, 30) >>> m 50 >>>
>>> max(3) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'int' object is not iterable >>> max(2, 3) 3 >>>
Vous pouvez utiliser cette fonction avec des types de données quelconques, mais lors d'un appel, toutes les données devront être de la même nature. Si le type considéré propose un opérateur <, alors rien de plus n'est requis.
>>> # Cas ou les données ne sont pas compatibles >>> data = [10, "toto", True] >>> max(data) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: '>' not supported between instances of 'str' and 'int' >>> >>> >>> # Ici, toutes les données sont du même type, donc tout est ok ! >>> from datetime import date >>> dates = [date(2015, 1, 1), date(2020, 6, 6), date(2010, 8, 9)] >>> max(dates) datetime.date(2020, 6, 6) >>>
Dans le cas où les données à traiter ne sont pas directement comparables, vous avez la possibilité de spécifier une fonction, ou une lambda, permettant de calculer une valeur comparable pour chacune des données d'origine.
>>> data = [{"first_name": "James", "last_name": "Bond", "kills": 1_007}, ... {"first_name": "Jason", "last_name": "Bourne", "kills": 954}] >>> max(data) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: '>' not supported between instances of 'dict' and 'dict' >>> max(data, key=lambda spy: spy["kills"]) {'first_name': 'James', 'last_name': 'Bond', 'kills': 1007} >>>
max(iterable, *[, default=obj, key=func]) -> value max(arg1, arg2, *args, *[, key=func]) -> value With a single iterable argument, return its biggest item. The default keyword-only argument specifies an object to return if the provided iterable is empty. With two or more arguments, return the largest argument.
Paramètre | Description |
---|---|
iterable : iterable |
La collection dans laquelle rechercher la plus grande valeur. |
arg1, arg2, *args : object |
Des données, du coup hors collection, dans lesquelles rechercher la plus grande valeur.
Avec cette manière d'invoquer la fonction max , au moins deux paramètres sont requis.
|
default : object |
Si le premier paramètre est une collection vide, ce paramètre nommé indique la valeur retournée par la fonction max .
Ce paramètre existe depuis Python 3.4.
|
key : function |
Une fonction, ou une lambda, permettant de produire le critère de comparaison de chaque donnée, au cas où les données d'origine ne seraient pas directement comparables. |
La valeur de retour est de type object.
Elle correspond à la plus grande information présente parmi les données à comparer.
TypeError :Une exception de ce type sera déclenchée si les données dans lesquels rechercher la valeur la plus grande ne sont pas comparables, ou bien, si vous avez invoqué la fonction avec un unique paramètre qui n'est pas itérable.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
#!/usr/bin/python3 # Une classe permettant de représenter le concept de nombres rationnels. class Rational: # Ceci est le constructeur de notre classe Rational def __init__(self, num, den): if den == 0: raise ValueError("denominator cannot be null") self.num = num self.den = den # Cette méthode permet de transformer nos rationnels en chaînes de caractères. def __str__(self): return f"[{self.num}/{self.den}]" # A noter : la classe ne fournit pas, volontairement, d'opérateur > # Il va donc être nécessaire d'utiliser une fonction/lambda de comparaison. if __name__ == '__main__': # On construit une liste de trois nombres rationnels. data = [Rational(7, 2), Rational(1, 3), Rational(2, 3)] # On recherche la plus grande valeur et on l'affiche. m = max(data, key=lambda rat: rat.num / rat.den) print(f"Le plus grand rationnel de la liste est {m}") |
Et voici les résultats produits par cet exemple.
$> python3 sample.py Le plus grand rationnel de la liste est [7/2] $>
Améliorations / Corrections
Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.
Emplacement :
Description des améliorations :