Trouver min de la valeur dans l'array > 0
Je suis à la recherche pour trouver le plus bas de la valeur positive dans un tableau et de sa position dans la liste. Si une valeur de la liste est dupliqué, la PREMIÈRE instance est d'intérêt. C'est ce que j'ai qui fait ce que je veux, mais inclut 0.
print "Position:", myArray.index(min(myArray))
print "Value:", min(myArray)
par exemple, comme il est si,
myArray = [4, 8, 0, 1, 5]
Position: 2, Valeur: 0
Je veux qu'il poste actuel: 3, valeur: 1
Pouvez-vous obtenir des valeurs en double dans votre tableau? Si oui, êtes-vous intéressé par la position de la première occurrence?
les doublons sont tout à fait possible, et oui première instance est ce qui est intéressant, merci de le signaler, modifiera question
Je suis confus par la description du problème: il dit "je suis à la recherche pour trouver le minimum de la valeur dans un tableau qui est plus grand que 0 et sa position correspondante" qui me lit comme la tâche est de trouver la plus petite valeur qui est supérieure à zéro et plus grande que sa position correspondante. Je suppose que c'est en fait destiné est de trouver la valeur la plus petite (et sa position) qui est supérieur à zéro...
Attention, toutes les solutions données ci-dessous échouera si la liste n'a pas d'objet qui est plus grand que 0.
les doublons sont tout à fait possible, et oui première instance est ce qui est intéressant, merci de le signaler, modifiera question
Je suis confus par la description du problème: il dit "je suis à la recherche pour trouver le minimum de la valeur dans un tableau qui est plus grand que 0 et sa position correspondante" qui me lit comme la tâche est de trouver la plus petite valeur qui est supérieure à zéro et plus grande que sa position correspondante. Je suppose que c'est en fait destiné est de trouver la valeur la plus petite (et sa position) qui est supérieur à zéro...
Attention, toutes les solutions données ci-dessous échouera si la liste n'a pas d'objet qui est plus grand que 0.
OriginalL'auteur user3001499 | 2015-01-15
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser un générateur d'expression avec
min
. Ceci permettra de définirm
comme la valeur minimale dansa
qui est plus grand que 0. Il utilise ensuitelist.index
pour trouver l'indice de la première fois que cette valeur s'affiche.Dans le pire des cas, cette solution nécessite la traversée
a
deux fois (si la valeur la plus petite est à la fin de la liste).Ouais, honnêtement, si j'étais à accepter que j'avais accepter thefourtheye la réponse ci-dessous (c'est pourquoi je upvoted). @user3001499, je vous suggère d'aller avec thefourtheye de la solution (et ne vous sentez pas mal si vous unaccept moi pour lui 🙂 )
Je suis nouveau sur le python et ont été invités à éviter les expressions lambda, jusqu'à ce que je suis plus confiant dans l'utilisation du langage, donc merci pour les conseils mais pour l'instant je vais être à l'aide de votre réponse
OriginalL'auteur Ffisegydd
Vous pouvez utiliser le
min
fonction etenumerate
fonction, comme ceciCela permet de s'assurer que, si la valeur est supérieure à
0
, puis utiliser cette valeur pour le minimum de comparaison de la valeur autrement utiliser la valeur maximale possible (float('inf')
).Puisque nous itération avec l'indice réel des articles, nous n'avons pas de trouver l'indice réel avec une autre boucle.
Upvoting ce parce qu'il est le premier à utiliser
enumerate
(ce qui évite la traversée dea
deux fois).Upvoting pour l'utilisation de la touche de paramètre à la fonction min - au lieu de boucle grâce à un générateur.
OriginalL'auteur thefourtheye
Voici un autre moyen de le faire avec un générateur d'expression. Notez comment les valeurs provenant d'énumérer (a et b) sont échangés dans le tuple de trier correctement.
L'argument par défaut sera retourné lorsque le générateur d'expression ne renvoie rien (i.e. il n'y a pas d'éléments supérieure à 0). La valeur par défaut peut être définie à ce qui fait sens dans l'entourage de la logique du programme - ici retour
None
vont vous permettre de tester avec soitif value:
ouif position:
Ce serait bien si elle pouvait tolérer les cas où il n'existe pas de valeur >0.
comment à ce sujet? J'ai essayé plusieurs moins agiles les méthodes avant de réaliser
min
avait un argument par défaut.Ma version ne semble pas être un argument par défaut pour
min
. Semble une bonne solution. Aussi, j'ai découvert que si j'ai mes entrées correctement, je n'ai pas rencontré le problème. Imaginez que.il semble qu'elle a été ajoutée dans la version 3.4
OriginalL'auteur neil
OriginalL'auteur sokoli
ajouter un filtre puis :
OriginalL'auteur markcial
OriginalL'auteur sramij
l'compliqué /façon algorithmique:
la première instance du plus petit élément plus grand que 0 est maintenant le premier élément que vous avez ajouté à la liste.
edit: vous aurez également une liste de tous les index de la valeur la plus petite. Quelques vérifications simples peuvent vous dire si il n'y a pas d'éléments dans le tableau supérieur à 0, ou si la liste est vide, etc.
Vrai, je vais laisser la réponse à la façon dont il est, cependant. Pour quiconque s'intéresse à pourquoi c'est le cas, vérifiez ceci: stackoverflow.com/questions/920645/...
OriginalL'auteur JHaps