gpt4 book ai didi

python - 排序多个列表的最快方法 - Python

转载 作者:太空狗 更新时间:2023-10-29 22:08:05 26 4
gpt4 key购买 nike

我有两个列表,x 和 y,我想通过 x 排序的排列对 x 进行排序并排列 y。例如,给定

x = [4, 2, 1, 3]
y = [40, 200, 1, 30]

我想得到

x_sorted = [1,2,3,4]
y_sorted = [1, 200, 30, 40]

正如在过去的问题中所讨论的,解决这个问题的一个简单方法是

x_sorted, y_sorted = zip(*sorted(zip(x,y)))

这是我的问题:最快的方法是什么?


我有三种方法来完成任务。

import numpy as np
x = np.random.random(1000)
y = np.random.random(1000)

方法一:

x_sorted, y_sorted = zip(*sorted(zip(x,y))) #1.08 ms 

方法二:

foo = zip(x,y)
foo.sort()
zip(*foo) #1.05 ms

方法三;

ind = range(1000)
ind.sort(key=lambda i:x[i])
x_sorted = [x[i] for i in ind]
y_sorted = [y[i] for i in ind] #934us

有没有比以上三种方法执行速度更快的更好的方法?


其他问题。

  1. 为什么方法 2 虽然使用了排序方法,但并不比方法 1 快?
  2. 如果我单独执行方法 2,它会更快。在 IPython 终端中,

我有

%timeit foo = zip(x,y)   #1000 loops, best of 3: 220 us per loop
%timeit foo.sort() #10000 loops, best of 3: 78.9 us per loop
%timeit zip(*foo) #10000 loops, best of 3: 73.8 us per loop

最佳答案

使用 numpy.argsort :

>>> import numpy as np
>>> x = np.array([4,2,1,3])
>>> y = np.array([40,200,1,30])
>>> order = np.argsort(x)
>>> x_sorted = x[order]
>>> y_sorted = y[order]
>>> x_sorted
array([1, 2, 3, 4])
>>> y_sorted
array([ 1, 200, 30, 40])

>>> timeit('order = np.argsort(x); x_sorted = x[order]; y_sorted = y[order]', 'from __main__ import x, y, np', number=1000)
0.030632019043

注意

如果输入数据已经是 numpy 数组,这是有意义的。

关于python - 排序多个列表的最快方法 - Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18349028/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com