Search code examples
pythonranking

Python Ranking only part of a list


I want to be able to rank only part of a list and ignore some elements in that list. I want to ignore elements that are -999 and rank the elements that aren't high to low.

For example:

test_cut = [0.18677649597722776, 0.21992417009282958, 0.21001370207789635, -999, -999, -999]

I want to get a result of [3,1,2,0,0,0]

But if I do this, it will rank the -999 also, which I want to have a value of 0 instead.

[sorted(test_cut, reverse=True).index(i) + 1 for i in test_cut]

output:

[3, 1, 2, 4, 4, 4]

Solution

  • You can put a conditional statement inside of your list comprehension, like the following:

    [sorted(test_cut, reverse=True).index(i) + 1 if i != -999 else 0 for i in test_cut]