import numpy as np
arr = np.array(["year","month","eye","i","stream","key","house"]) # np-array needed for later indexing
arr_ = map(lambda x: len(x), arr) # remark: py3 would work different here
x = arr[np.argsort(arr_)]
print(x)
In [77]: len(arr1)
Out[77]: 7000
In [78]: timeit sarr=sorted(arr1,key=len)
100 loops, best of 3: 3.03 ms per loop
In [79]: %%timeit
arrA=np.array(arr1)
larr=[len(i) for i in arrA] # list comprehension works same as map
sarr=arrA[np.argsort(larr)]
....:
100 loops, best of 3: 7.77 ms per loop
添加一个包含字符串长度的helper数组,然后使用numpy的argsort为您提供将根据这些长度排序的索引。用这些索引索引原始数据:
如果我将列表扩展到
arr1=arr*1000
,那么使用len
作为key
函数的Python列表排序最快。在将列表转换为数组大约需要1毫秒(这种转换会增加大量开销,特别是对于小列表)。使用已经创建的数组,
^{pr2}$np.char.str_len
时间仍然比Pythonsort
慢。在np.char
函数可能很方便,它们仍然基本上迭代列表,应用相应的str
方法。在一般来说,
argsort
提供了与key
函数相同的功能。在相关问题 更多 >
编程相关推荐