Python 用负数对numpy字符串数组排序?

Python 用负数对numpy字符串数组排序?,python,arrays,sorting,numpy,Python,Arrays,Sorting,Numpy,我对以数字为字符串的numpy数组排序有问题。我需要将它们保留为字符串,因为整数后面还有其他单词 它将负数按相反顺序排序: >>> import numpy as np >>> a = np.array(["3", "-2", "-1", "0", "2"]) >>> a.sort() >>> a array(['-1', '-2', '0', '2', '3'], dtype='|S2') 我本以为结果是: array(

我对以数字为字符串的numpy数组排序有问题。我需要将它们保留为字符串,因为整数后面还有其他单词

它将负数按相反顺序排序:

>>> import numpy as np
>>> a = np.array(["3", "-2", "-1", "0", "2"])
>>> a.sort()
>>> a
array(['-1', '-2', '0', '2', '3'], dtype='|S2')
我本以为结果是:

array(['-2', '-1', '0', '2', '3'], dtype='|S2')

有什么建议吗?

假设在其他单词之前的整数后面有一个空格,那么如果
a
是regluar python
列表,您应该:

a.sort(key = lambda s: int(s.split()[0]))

不确定numpy中的等价物是什么(不知道如何指定键),但一种可能性是转换为列表并返回到数组。

假设在其他单词之前的整数后面有一个空格,那么如果
a
是regluar python
list
,您应该:

a.sort(key = lambda s: int(s.split()[0]))
不确定numpy中的等价物是什么(不知道如何指定键),但一种可能是转换为列表并返回到数组。

您可以使用:

您可以使用:


那么您将两种类型的数据保存在一个字符串中?似乎不太适合
numpy
“我需要将它们保留为字符串,因为整数后面还有其他单词”。因此,您有一个类似于
“76号长号”
的字符串,您想将其视为数字
76
,后跟单词
“长号”
?那就这样做吧。解析字符串并创建两个元组(数字,字符串的其余部分)。不,它的行为不好。有时是数字和字符串,有时只是字符串。“自然排序”的方法是有效的。那么您将两种类型的数据保存在一个字符串中?似乎不太适合
numpy
“我需要将它们保留为字符串,因为整数后面还有其他单词”。因此,您有一个类似于
“76号长号”
的字符串,您想将其视为数字
76
,后跟单词
“长号”
?那就这样做吧。解析字符串并创建两个元组(数字,字符串的其余部分)。不,它的行为不好。有时是数字和字符串,有时只是字符串。“自然排序”方法是有效的。如果你尝试排序
[“-1单词”,“-2向上”]
,这就是我认为OP的意思是“整数后面的其他单词”。我在数组包含
[“-1单词”,“-2向上”]
时发布了输出。我认为顺序是正确的,不是吗?你是对的。我误读了你的正则表达式。看起来不错,这取决于您希望如何处理字符串开头不显示整数的情况!(我的引发了一个ValueError。)如果你尝试排序
[“-1单词”,“-2向上”]
,那将得到错误的顺序,这就是我认为OP的意思是“整数后面的其他单词”。我在数组包含
[“-1单词”,“-2向上”]
时发布了输出。我认为顺序是正确的,不是吗?你是对的。我误读了你的正则表达式。看起来不错,这取决于您希望如何处理字符串开头不显示整数的情况!(我的引发了一个ValueError。)您的版本使用排序(a,key=lambda s:int(s.split()[0])
。谢谢您的版本可以使用排序(a,key=lambda s:int(s.split()[0]))。谢谢