Consider X = [1000, 500, 700, 5000, 700]. We want to replace this by [3, 1,2,4,2].
Criteria:
1. Use Python. Sorry no java.
2. Fewest lines of code.
3. Elegant, not to use a temporary copy and not using a convoluted BRUTE force method as in the following example, yes I wrote it but that was a temporary solution. I refuse to give a hint, but Python has a powerful discrete math function :)
tempR = X[:] for j in range(1, n+1): minrank = min(tempR) for k in range(n): if X[k] == minrank and k< n+1: X[k] = j tempR[k] = n+1 return X4. Name your function, normalsequence(X). . Here is what I believe a more elegant solution.
def normalsequence(X): #ensure that the ranks are in sequence! for i, x in enumerate(sorted(list(set(R[:])))): for j, y in enumerate(R): if y == x: R[j] = i+1Far more sophisticated (one-liners) for a similar problem is stack overflow: efficient method to calculate the rank vector of a Python list. This solution is also part of the Python code for transforming raw scores to ranks in my other post Python, statistics: Ranking a single array of raw scores
No comments:
Post a Comment