Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

trouver le maxi d'une liste d'entier.

8 réponses
Avatar
JB BUTET
Bonjour :)

Je suis en train de m'essayer au traitement d'une image de 10 pix/10 pix
(faut commencer petit ;) )

J'aimerai trouver la ligne qui est la plus lumineuse.

Donc j'ai fait la somme des valeurs des pixels pour chaque ligne.
exemple :
print sommeligne
[110, 333, 456, 678, 864, 200, 345, 543, 123, 456]

Ensuite, j'aimerai pouvoir tirer de cette liste la valeur maximale et
retrouver l'indice.

Y'a-t-il une methode toute faite pour cela ?

A bientot.

JB

8 réponses

Avatar
elGringo
Salut,

liste = [110, 333, 456, 678, 864, 200, 345, 543, 123, 456]
print max(liste), liste.index(max(liste))
864 4




par contre, ca ne te renverra l'index que de la premiere valeur max
(si il y en plusieurs).



Avatar
Amaury Forgeot d'Arc
Bonjour,

Bonjour :)

Je suis en train de m'essayer au traitement d'une image de 10 pix/10 pix
(faut commencer petit ;) )

J'aimerai trouver la ligne qui est la plus lumineuse.

Donc j'ai fait la somme des valeurs des pixels pour chaque ligne.
exemple :
print sommeligne
[110, 333, 456, 678, 864, 200, 345, 543, 123, 456]

Ensuite, j'aimerai pouvoir tirer de cette liste la valeur maximale et
retrouver l'indice.

Y'a-t-il une methode toute faite pour cela ?


J'imagine que tu connais la fonction max():
max(sommeligne)
864



Et pour trouver l'indice de ce 864:
sommeligne.index(max(sommeligne))
4




index(), max()... ce sont les mots mêmes de ta question (en anglais)

Mais attention, il y a peut-être plusieurs lignes correspondant au
maximum! S'il faut toutes les trouver, c'est autre chose...
valeurMax = max(sommeligne)
[i for i, v in enumerate(sommeligne) if v == valeurMax]
[4]




Et je ne peux résister à montrer une méthode qui donne la réponse en ne
parcourant qu'une seule fois la liste :
import operator
max(enumerate(sommeligne), key=operator.itemgetter(1))
(4, 864)



Mais ce n'est pas sûr que ce soit plus rapide, et c'est moins lisible...


--
Amaury Forgeot d'Arc



Avatar
JB BUTET
Merci a tous,

J'ai encore des soucis de syntaxe ...

c'est pourquoi ca ne marchait pas bien...

Le python, c'est bien, mangez-en.

Merci.

JB

--
http://astrolix.org

Bonjour,

Bonjour :)

Je suis en train de m'essayer au traitement d'une image de 10 pix/10
pix (faut commencer petit ;) )

J'aimerai trouver la ligne qui est la plus lumineuse.

Donc j'ai fait la somme des valeurs des pixels pour chaque ligne.
exemple :
print sommeligne
[110, 333, 456, 678, 864, 200, 345, 543, 123, 456]

Ensuite, j'aimerai pouvoir tirer de cette liste la valeur maximale et
retrouver l'indice.

Y'a-t-il une methode toute faite pour cela ?


J'imagine que tu connais la fonction max():
max(sommeligne)
864



Et pour trouver l'indice de ce 864:
sommeligne.index(max(sommeligne))
4




index(), max()... ce sont les mots mêmes de ta question (en anglais)

Mais attention, il y a peut-être plusieurs lignes correspondant au
maximum! S'il faut toutes les trouver, c'est autre chose...
valeurMax = max(sommeligne)
[i for i, v in enumerate(sommeligne) if v == valeurMax]
[4]




Et je ne peux résister à montrer une méthode qui donne la réponse en ne
parcourant qu'une seule fois la liste :
import operator
max(enumerate(sommeligne), key=operator.itemgetter(1))
(4, 864)



Mais ce n'est pas sûr que ce soit plus rapide, et c'est moins lisible...







Avatar
Eric Deveaud
Amaury Forgeot d'Arc wrote:

J'imagine que tu connais la fonction max():
max(sommeligne)
864



Et pour trouver l'indice de ce 864:
sommeligne.index(max(sommeligne))
4





Et je ne peux résister à montrer une méthode qui donne la réponse en ne
parcourant qu'une seule fois la liste :
import operator
max(enumerate(sommeligne), key=operator.itemgetter(1))
(4, 864)



Mais ce n'est pas sûr que ce soit plus rapide, et c'est moins lisible...



et pouruo ine pas faire simplement
max_val = max(sommeligne)
index_max_val = sommeligne.index(max_val)

on a un seul parcour aussi non ???

Eric




Avatar
Jerome
Eric Deveaud wrote:
Amaury Forgeot d'Arc wrote:
J'imagine que tu connais la fonction max():
max(sommeligne)
864



Et pour trouver l'indice de ce 864:
sommeligne.index(max(sommeligne))
4





Et je ne peux résister à montrer une méthode qui donne la réponse en ne
parcourant qu'une seule fois la liste :
import operator
max(enumerate(sommeligne), key=operator.itemgetter(1))
(4, 864)



Mais ce n'est pas sûr que ce soit plus rapide, et c'est moins lisible...



et pouruo ine pas faire simplement
max_val = max(sommeligne)
index_max_val = sommeligne.index(max_val)

on a un seul parcour aussi non ???

Eric


Tu as 2 parcours si tu fais ça, 1 pour le 'max' et 1 pour le 'index'





Avatar
Eric Deveaud
Jerome wrote:
Eric Deveaud wrote:

et pouriquoi ne pas faire simplement
max_val = max(sommeligne)
index_max_val = sommeligne.index(max_val)

on a un seul parcour aussi non ???


Tu as 2 parcours si tu fais ça, 1 pour le 'max' et 1 pour le 'index'


en effet, je mérite des baffes :-<

Eric


Avatar
maric
Bonjour,

Bonjour :)

Je suis en train de m'essayer au traitement d'une image de 10 pix/10
pix (faut commencer petit ;) )

J'aimerai trouver la ligne qui est la plus lumineuse.

Donc j'ai fait la somme des valeurs des pixels pour chaque ligne.
exemple :
print sommeligne
[110, 333, 456, 678, 864, 200, 345, 543, 123, 456]

Ensuite, j'aimerai pouvoir tirer de cette liste la valeur maximale et
retrouver l'indice.

Y'a-t-il une methode toute faite pour cela ?


J'imagine que tu connais la fonction max():
max(sommeligne)
864



Et pour trouver l'indice de ce 864:
sommeligne.index(max(sommeligne))
4




index(), max()... ce sont les mots mêmes de ta question (en anglais)

Mais attention, il y a peut-être plusieurs lignes correspondant au
maximum! S'il faut toutes les trouver, c'est autre chose...
valeurMax = max(sommeligne)
[i for i, v in enumerate(sommeligne) if v == valeurMax]
[4]




Et je ne peux résister à montrer une méthode qui donne la réponse en ne
parcourant qu'une seule fois la liste :
import operator
max(enumerate(sommeligne), key=operator.itemgetter(1))
(4, 864)



Mais ce n'est pas sûr que ce soit plus rapide, et c'est moins lisible...


C'est forcément plus rapide à mesure que la liste grossit mais cela ne

donne toujours que l'index du premier maximum.
la solution la plus sûr en terme de perfs/lisibilité dans ce cas c'est
un algorithme plus classique (non testé) :

max=-1
for index, value in enumerate(someligne) :
if value > max :
max, indexes = value, [index]
elif value == max :
indexes.append(index)




Avatar
Cémoi
Bonjour,

Bonjour :)

Je suis en train de m'essayer au traitement d'une image de 10 pix/10
pix (faut commencer petit ;) )

J'aimerai trouver la ligne qui est la plus lumineuse.

Donc j'ai fait la somme des valeurs des pixels pour chaque ligne.
exemple :
print sommeligne
[110, 333, 456, 678, 864, 200, 345, 543, 123, 456]

Ensuite, j'aimerai pouvoir tirer de cette liste la valeur maximale et
retrouver l'indice.

Y'a-t-il une methode toute faite pour cela ?


J'imagine que tu connais la fonction max():
max(sommeligne)
864



Et pour trouver l'indice de ce 864:
sommeligne.index(max(sommeligne))
4




index(), max()... ce sont les mots mêmes de ta question (en anglais)

Mais attention, il y a peut-être plusieurs lignes correspondant au
maximum! S'il faut toutes les trouver, c'est autre chose...


Je propose une solution qui repose complètement sur des 'arrays' (à la
sauce scipy/numpy) et des fonctions qui leur sont dédiées:

a = [110, 333, 456, 678, 864, 200, 345, 543, 123, 456]
a_max_indices = nonzero (equal (a, max (a)))[0]

On peut très facilement chercher autre chose que des maximums, en
cherchant par exemple tous les supérieurs ou égaux à la moyenne, avec
les fonctions greater_equal() et mean() en lieu et place de equal() et
max().

Pour récupérer les valeurs, il suffit de faire un take (a, a_max_indices).

Je n'est pas cherché à évaluer les performances sur des gros tableaux,
l'intérêt me parait être la lisibilité et la souplesse, tout en
utilisant des fonctions qui ont été développées dans ce but.

HTH,

Laurent


PS: on peut faire la même chose en utilisant des méthodes plutôt que des
fonctions.