How can i get a permutation given indexes?

Refresh

December 2018

Views

1.8k time

3

I've got a list of objects:

array = [object0,object1,object2,object3,object4]

and i want to change the order of the items given a permutation:

permutation = [ 2 , 4 , 0 , 1 , 3 ]

Is there a command in python that will do something like:

result = Permute(array,permutation)

result = [object2,object4,object0,object1,object3]

I know i can do it with a simple for loop....

4 answers

0

Используйте перетасовать метод из NumPy

import numpy as np
arr = np.arange(10)
np.random.shuffle(arr)
print(arr)

[1 7 5 2 9 4 3 6 0 8]

Справка: https://docs.scipy.org/doc/numpy-1.15.0/reference/generated/numpy.random.shuffle.html

3

Просто для полноты версии, в которой для вообще:

seed = ['foo', 'bar', 'baz']
permutation = [1, 2, 0]
result = map(lambda i: seed[i], permutation)
print result # --> ['bar', 'baz', 'foo']

Я предпочел бы придерживаться списка на понимание ребят, хотя. ;)

4

В Python, это легко сделать с помощью списка понимания :

result = [array[i] for i in permutation]
5

Если мы предполагаем , что permutationэто правильная перестановка 0-n(каждый появляется ровно один раз), то следующий код должен работать:

result=[array[i] for i in permutation]