如何使用numpy生成基于2个其他数组的数组

fjaof16o  于 2023-10-19  发布在  其他
关注(0)|答案(4)|浏览(110)

我有2个列表长度为n的目标是创建一个新的列表与一定的元素顺序的基础上2现有的列表
输入:

5
5 2 3 1 4
1 3 2 4 5

产出:

4 3 2 5 1

我的解决方案是可行的,但是对于大数据集(比如每个列表中有100000个项目)来说,速度太慢了

n = int(input())
first = input().split()
second = input().split()

res = [first[second.index(digit)] for digit in first]

print(*res)

我试图使用numpy.fromfunction()来使它工作得更快,但得到错误,无法找出我做错了什么

import numpy as np

n = int(input())

first = np.fromstring(input(), sep=' ', dtype=int)
second = np.fromstring(input(), sep=' ', dtype=int)

print(np.fromfunction(lambda x: first[np.where(first == second[x])[0][0]], (n,), dtype=int))
dgsult0t

dgsult0t1#

建立一个索引,将数字Map到它们的位置:

n = int(input())
first = [int(i) for i in input().split()]
second = [int(i) for i in input().split()]

index = { v:n for n,v in enumerate(second) }

res = [first[index[i]] for i in first]

print(*res)

输出量:

4 3 2 5 1
bfrts1fy

bfrts1fy2#

时间复杂度为O(n^2)在O(n)的情况下,时间复杂度为O(n)。

n = int(input())
first = input().split()
second = input().split()

second_dict = {}
for i, x in enumerate(second):
    second_dict[x] = i

first_i = [second_dict[x] for x in first]
res = [first[i] for i in first_i]

print('output:', *res)

打印:

3
a b c
c a b
output: b c a
pvabu6sv

pvabu6sv3#

谢谢大家的帮助,找到了另一个解决方案

n = int(input())

first = tuple(map(int, input().split()))
second = tuple(map(int, input().split()))

res = [0]*n

for i in range(n):
    res[first[i]-1] = second[i]

print(*res)
laawzig2

laawzig24#

使用numpy,你可以使用已排序的first数组的索引来索引second数组(排序是因为first数组说明了它们应该去哪里,但我们希望获得从second中选择正确项的索引的顺序)。

import numpy as np

first = np.fromstring(input(), sep=" ", dtype=int)
second = np.fromstring(input(), sep=" ", dtype=int)
res = second[np.argsort(first)]
print(res)

输入:

5 2 3 1 4
1 3 2 4 5

输出量:

[4 3 2 5 1]

相关问题