我有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))
4条答案
按热度按时间dgsult0t1#
建立一个索引,将数字Map到它们的位置:
输出量:
bfrts1fy2#
时间复杂度为O(n^2)在O(n)的情况下,时间复杂度为O(n)。
打印:
pvabu6sv3#
谢谢大家的帮助,找到了另一个解决方案
laawzig24#
使用numpy,你可以使用已排序的
first
数组的索引来索引second
数组(排序是因为first
数组说明了它们应该去哪里,但我们希望获得从second
中选择正确项的索引的顺序)。输入:
输出量: