如何获得给定索引的排列?

| 我有一个对象列表:
array = [object0,object1,object2,object3,object4]
我想更改给定排列的项目的顺序:
permutation = [ 2 , 4 , 0 , 1 , 3 ]
python中是否有一条命令可以执行以下操作:
result = Permute(array,permutation)

result = [object2,object4,object0,object1,object3]
我知道我可以用一个简单的
for
循环来做...     
已邀请:
        如果我们假设
permutation
0-n
的适当置换(每个正好出现一次),那么以下代码应该工作:
result=[array[i] for i in permutation]
    
        在Python中,使用列表理解很容易做到:
result = [array[i] for i in permutation]
    
        为了完整起见,完全没有版本:
seed = [\'foo\', \'bar\', \'baz\']
permutation = [1, 2, 0]
result = map(lambda i: seed[i], permutation)
print result # --> [\'bar\', \'baz\', \'foo\']
不过,我宁愿选择名单理解专家。 ;)     
        使用numpy中的shuffle方法
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/generation/numpy.random.shuffle.html     
        您可以使用索引交换。 你有两个数组a和b
def swap_random(a, b):
\"\"\"Randomly swap entries in two arrays.\"\"\"
# Indices to swap
    swap_inds = np.random.random(size=len(a)) < 0.5 # your threshold 

# Make copies of arrays a and b for output
    a_out = np.copy(a)
    b_out = np.copy(b)

# Swap values
   a_out[swap_inds] = b[swap_inds]
   b_out[swap_inds] = a[swap_inds]

   return a_out, b_out
所以,做测试
d = np.array(range(0,15))
r = np.array(range(16,31))

display(d,r)

>>> array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14])
>>> array([16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30])


display(swap_random(d, r))
>>> (array([ 0, 17,  2,  3, 20, 21, 22,  7, 24, 25, 10, 11, 28, 13, 14]),
>>> array([16,  1, 18, 19,  4,  5,  6, 23,  8,  9, 26, 27, 12, 29, 30]))
    

要回复问题请先登录注册