鉴于:
R=["ip1", "ip7", "ip12", "ip5", "ip2", "ip22", "ip7", "ip1", "ip17", "ip22"]
我想获得我的列表
R
的唯一值及其相应的索引。
现在,我有
name,idx=np.unique(R,return_inverse=True)
返回:
array(['ip1', 'ip12', 'ip17', 'ip2', 'ip22', 'ip5', 'ip7'], dtype='<U4') # name
[0 6 1 5 3 4 6 0 2 4] # idx
但我想使用自定义排序,结果如下:
['ip1', 'ip2', 'ip5', 'ip7', 'ip12', 'ip17', 'ip22']
[0 3 4 2 1 6 3 0 5 6]
在
list
中,我可以将Rs=sorted(R, key=lambda x: int(x[2:]))
与自定义的key
一起使用,但我无法获得唯一值和相应的索引。
有什么方法可以操纵排序键
np.unique
或者是否已经有更好的方法来处理这个问题?
修改代码后。我得到了想要的输出。
import numpy as np
R = ["ip1", "ip7", "ip12", "ip5", "ip2", "ip22", "ip7", "ip1", "ip17", "ip22"]
unique_values, indices = np.unique(R, return_inverse=True)
def custom_sort_key(value):
return int(value[2:])
sorted_indices = np.argsort([custom_sort_key(value) for value in unique_values])
sorted_unique_values = unique_values[sorted_indices]
sorted_indices = np.argsort(sorted_indices)
print(sorted_unique_values)
print(sorted_indices)
输出:
['ip1' 'ip2' 'ip5' 'ip7' 'ip12' 'ip17' 'ip22']
[0 4 5 1 6 2 3]
转换为int后运行
unique
:
np.unique([int(x[2:]) for x in R], return_inverse=True)
array([0, 3, 4, 2, 1, 6, 3, 0, 5, 6])