Один из массивов строк не отсортирован

#python #python-3.x #sorting

#python #python-3.x #сортировка

Вопрос:

 import numpy as np

arr1=np.array(['102.0','135.0','135.0','152.0','93.0','95.0'])

print(arr1)
arr1.sort()
print(arr1)

print()

arr2=np.array(['86.0','82.0','84.0','87.0','95.0','89.0'])

print(arr2)
arr2.sort()
print(arr2)
 

Первый массив не отсортирован, но второй отсортирован, почему?. Я не могу найти ошибку.

Ответ №1:

sort Функция правильно сортирует только целые числа, поэтому для строк она сортирует по первому символу, поэтому строки, превышающие сто, будут перед тем, что составляет девяносто с чем-то, способ исправить это — изменить их на целые числа:

 import numpy as np

arr1=np.array(['102.0','135.0','135.0','152.0','93.0','95.0'])
arr1 = arr1.astype(float)
print(arr1)
arr1.sort()
print(arr1)

print()

arr2=np.array(['86.0','82.0','84.0','87.0','95.0','89.0'])
arr2 = arr2.astype(float)
print(arr2)
arr2.sort()
print(arr2)
 

Как упоминал @juanpa.arrivillaga:

он сортирует лексикографически по всем символам

Комментарии:

1. «он сортируется по первому символу» он сортирует лексикографически по всем символам

Ответ №2:

Вы сортируете строки, функция сортировки правильно сортирует строковые элементы (например, «102.0» предшествует «93.0»). Если вы хотите правильно сортировать целые числа, удалите двойные кавычки вокруг всех ваших элементов:

 arr1=np.array([102.0,135.0,135.0,152.0,93.0,95.0])
arr2=np.array([86.0,82.0,84.0,87.0,95.0,89.0])
 

Комментарии:

1. В общем, предположим, что данные, которые люди предоставляют в качестве входных данных, являются примером.. поэтому вместо того, чтобы сосредоточиться на решении примера, предположим, что предоставленные данные изначально не создаются во время выполнения, как в примере, а являются чем-то, что предоставляется пользователю в качестве входных данных из другого ресурса. Вы проголосовали за мой голос, потому что ваше объяснение затронуло проблему. Удачи!