Python 按另一个位置数组排序数组

标签 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

另一个例子:

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 

算法背后的思想:

  1. 创建结果列表,其大小能够容纳 b 中的最大索引
  2. -1 填充此列表
  3. 遍历 b元素
  4. res[b[i]] 中设置元素具有适当的值(value) a[i]

这将留下带有 -1 的结果列表在除 b 中包含的索引以外的所有位置, 它们的对应值为 a .

关于Python 按另一个位置数组排序数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20531883/

相关文章:

python - 函数的嵌套循环

sorting - jdk 中的快速排序或 O(N.logN) 排序

java - 如何在 Java 中按对角排序顺序获取此列表

python - 从外部源更改 Django 的设置

python - 使用Python的多处理模块的同步问题

c++ - 读取名称为字符串值的文件后,字符串值被重写

c++ - 将数组中的位置存储为要在 if 语句中更改的变量

java - 添加/删除元素时创建新数组?

java - 如何对用户在 Java 中定义的随机生成的数字进行排序?

python - 在 HTML 页面上打印时显示结果