2 votes

Trouver le nombre précédent dans une liste de nombres flottants et entiers

J'ai une liste de flottants et d'entiers comme ci-dessous

[2,4.635,9,18,27.548,36]

Pour une entrée donnée, je veux trouver le numéro précédent de cette entrée dans la liste en comparant ce numéro avec les numéros de la liste. Par exemple, si je donne un numéro à une entrée donnée, je veux trouver le numéro précédent de cette entrée dans la liste : si je donne 8.9 En entrée, je devrais obtenir 4.635 en sortie, existe-t-il une fonction intégrée pour cela ?

4voto

dawg Points 26051

Vous pouvez utiliser bissecter pour trouver le point d'insertion d'une valeur dans une liste triée :

import bisect 
li=[2,4.635,9,18,27.548,36]

>>> li[bisect.bisect_left(li,8.9)-1]    
4.635     

Vous pouvez également utiliser un simple for et zip sur une liste triée :

for lo,hi in zip(li,li[1:]):
    if lo< 8.9 <=hi:
        print lo 
        break

1voto

Poshi Points 3191

Je ne me souviens pas d'une méthode intégrée pour cela, mais elle est assez facile à mettre en œuvre :

def get_previous(l, query):
    return max([x for x in l if x<query])

query = 8.9
l = [2,4.635,9,18,27.548,36]
result = get_previous(l, query)

Si la liste est triée, il pourrait y avoir de meilleures façons d'y parvenir (recherche binaire), mais vous ne le dites pas.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X