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

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)

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

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
0
55
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Функция 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:

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

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

juanpa.arrivillaga 16.12.2020 07:27

Вы сортируете строки, функция сортировки правильно сортирует элементы строки (например, «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])

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

adir abargil 16.12.2020 07:49

Другие вопросы по теме