Python排序数组由另一个位置数组组成

Mar*_*edy 2 python arrays sorting

假设我有两个数组,第一个包含int数据,第二个包含位置

a = [11, 22, 44, 55]

b = [0, 1, 10, 11]

即我想a[i]被移到位置b[i] for all i.如果我没有指定位置,则插入一个-1

即

sorted_a = [11, 22,-1,-1,-1,-1,-1,-1,-1,-1, 44, 55]
            ^   ^                            ^   ^
            0   1                            10  11
Run Code Online (Sandbox Code Playgroud)

另一个例子:

a = [int1, int2, int3]

b = [5, 3, 1]

sorted_a = [-1, int3, -1, int2, -1, int1]
Run Code Online (Sandbox Code Playgroud)

这是我尝试过的:

def sort_array_by_second(a, b):

   sorted = []

   for e1 in a:
      sorted.appendAt(b[e1])

  return sorted
Run Code Online (Sandbox Code Playgroud)

我明显搞砸了.

Pau*_* Bu 7

像这样的东西:

res = [-1]*(max(b)+1)   # create a list of required size with only -1's

for i, v in zip(b, a):
    res[i] = v 
Run Code Online (Sandbox Code Playgroud)

算法背后的想法:

  1. 创建结果列表,其大小能够容纳最大的索引 b
  2. 使用填充此列表 -1
  3. 迭代b元素
  4. res[b[i]]用适当的值设置元素a[i]

这将使结果列表保留在-1包含的索引之外的每个位置b,其中的索引将具有相应的值a.