pythonlistfloating-pointminimumfloating-point-precision

Python: Find index of minimum item in list of floats


How can I find the index of the minimum item in a Python list of floats? If they were integers, I would simply do:

minIndex = myList.index(min(myList))

However, with a list of floats I get the following error, I assume because float equality comparison is rather iffy.

ValueError: 0.13417985135 is not in list

Now, I know that I could simply scroll through the list and compare each item to see whether it is < (min + 0.0000000000001) and > (min - 0.0000000000001), but that is kinda messy. Is there a more elegant (preferably built-in) way to find the index of the smallest item in a list of floats?


Solution

  • You're effectively scanning the list once to find the min value, then scanning it again to find the index, you can do both in one go:

    from operator import itemgetter
    min(enumerate(a), key=itemgetter(1))[0]