【问题标题】:How to sort str in Python using NumPy如何使用 NumPy 在 Python 中对 str 进行排序
【发布时间】:2020-12-16 13:14:25
【问题描述】:
a = np.array(10,2,3,1,20,30) #I got it from the Input.
b = np.sort(a)

它给了我一个结果 [1,10,2,20,3,30] 而不是 [1,2,3,10,20,30]

【问题讨论】:

  • 如果你从input得到数组,你必须先将所有参数转换为int。 (input 总是返回 str。)
  • ...在 Python 3 中,即它总是返回一个字符串;大概 OP 来自旧版本的语言。

标签: python arrays string numpy sorting


【解决方案1】:

由于您正在获取输入并将其添加到数组中,因此“数字”将是 str 而不是 ints。您需要先将输入转换为int 而不是str

将输入更改为int:

user_in = int(input()) # ex: '4'
print(type(user_in)) # <class 'int'>

注意我是如何使用input() 周围的int() 将用户输入从str 转换为int

现在可以将输入添加到数组中,由于值是整数而不是字符串,您将获得预期的结果。

修改列表中已有项目为int

另一种方法是将包含数字作为字符串的数组更改为ints。您可以 map() 将数组中的所有项目更改为 int

arr = list(map(int, arr))

这将遍历您的列表并将每个项目的类型更改为int

【讨论】:

  • 这是正确的,但我也建议最初将输入存储为字符串,并在 try: ... except: ... 块中捕获字符串中的 int 转换,以确保在用户输入内容时程序不会崩溃不能转换为整数。
【解决方案2】:
import numpy as np
arr = np.array([10,2,3,1,20,30])
print(np.sort(arr))

这很好用。在尝试排序之前先创建一个列表。

【讨论】:

    【解决方案3】:

    编写代码时的准确性,你的问题很重要。

    您的示例数组产生错误:

    In [69]: a = np.array(10,2,3,1,20,30)                                                                
    ---------------------------------------------------------------------------
    TypeError                                 Traceback (most recent call last)
    <ipython-input-69-d65567166292> in <module>
    ----> 1 a = np.array(10,2,3,1,20,30)
    
    TypeError: array() takes from 1 to 2 positional arguments but 6 were given
    

    将其更改为整数列表:

    In [70]: a = np.array([10,2,3,1,20,30])                                                              
    In [71]: a                                                                                           
    Out[71]: array([10,  2,  3,  1, 20, 30])
    

    排序做你想做的事:

    In [72]: np.sort(a)                                                                                  
    Out[72]: array([ 1,  2,  3, 10, 20, 30])
    

    但如果输入是字符串或字符串列表:

    In [73]: a = np.array('10,2,3,1,20,30'.split(','))                                                   
    In [74]: a                                                                                           
    Out[74]: array(['10', '2', '3', '1', '20', '30'], dtype='<U2')
    In [75]: np.sort(a)                                                                                  
    Out[75]: array(['1', '10', '2', '20', '3', '30'], dtype='<U2')
    

    排序是字符串词法。并且使用引号来显示字符串是明确的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-19
      • 1970-01-01
      • 1970-01-01
      • 2021-11-11
      • 1970-01-01
      • 2021-03-23
      • 2013-10-09
      相关资源
      最近更新 更多