Home > Net >  How would you re-order the reordered list back to its previous form?
How would you re-order the reordered list back to its previous form?

Time:11-16

element =  ['a', 'b', 'c', 'd', 'e', 'f', 'g']
index_list =  [3,5,6,1,2,4,0]

result = [element[i] for i in index_list]
print(result)

this would eventually give me a ordered list based on the index list which would give ['d', 'f', 'g', 'b', 'c', 'e', 'a'].

How would you re-order this already re-ordered list back to its previous form which would be ['a', 'b', 'c', 'd', 'e', 'f', 'g']? I tried using the given index list again but it did not returned it back, but simply gave me a new list. Would there be any way I could still use the given index list to reorder the list back?

CodePudding user response:

You can do the opposite:

reordered = [None] * len(result)
for index, e in zip(index_list, result):
    reordered[index] = e

CodePudding user response:

You can process index_list to do the reverse permutation:

index_list =  [3,5,6,1,2,4,0]    
reverse = [i for i, n in sorted(enumerate(index_list), key=lambda x: x[1])]

original = [result[i] for i in reverse]

CodePudding user response:

something like this

print([a for a, b in sorted(zip(result, index_list), key=lambda x: x[1])])
  • Related