老实说,这个问题没有出现在论坛上(至少从我所见),对此我感到很惊讶。无论如何,我目前正在尝试使用np.argsort以字母形式对字符串列表进行排序,其中许多为空,如下所示:
list = [ "Carrot", "Star", "Beta", "Zoro" , ""]
现在,对np.argsort(list)的任何调用都将返回以下索引数组:
[4,2,0,1,3] # => ["", "Beta", "Carrot", "Star", "Zoro"]
是否有一种方法可以指定argsort函数的顺序,以便将空字符串像这样放置在数组的末尾:
[2,0,1,3,4] # => ["Beta", "Carrot", "Star", "Zoro", ""]
任何输入将不胜感激!
获得所需订单的一种简单方法是使用np.roll
:
lst = [ "Carrot", "Star", "Beta", "Zoro" , ""]
arr = np.array(lst)
idx = np.roll(arr.argsort(),np.count_nonzero(arr))
arr[idx]
# array(['Beta', 'Carrot', 'Star', 'Zoro', ''], dtype='<U6')
如果要使用Numpy方法,请在Numpy数组上使用它们,而不要在“普通” Python列表。
所以从生成Numpy数组开始:
lst = np.array(list)
然后:
要做的代码是:
np.argsort(np.where(lst != '', lst, np.nan))
给出:
array([2, 0, 1, 3, 4], dtype=int64)
因此与“”相关的索引(索引4处的空字符串)在末尾,如您所愿。