假设我有两个数组,第一个包含 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
另一个例子:
a = [int1, int2, int3]
b = [5, 3, 1]
sorted_a = [-1, int3, -1, int2, -1, int1]
这是我尝试过的:
def sort_array_by_second(a, b):
sorted = []
for e1 in a:
sorted.appendAt(b[e1])
return sorted
我显然搞砸了。
最佳答案
像这样:
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
算法背后的思想:
- 创建结果列表,其大小能够容纳
b
中的最大索引 - 用
-1
填充此列表 - 遍历
b
元素 - 在
res[b[i]]
中设置元素具有适当的值(value)a[i]
这将留下带有 -1
的结果列表在除 b
中包含的索引以外的所有位置, 它们的对应值为 a
.
关于Python 按另一个位置数组排序数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20531883/