Python – как отсортировать список числовых значений в порядке возрастания

Я создал базу данных sqlite, в которой есть таблица, в которой хранятся значения температуры. Значения температуры записываются в базу данных в порядке возрастания в первый раз. Затем я считываю значения температуры из базы данных в список, а затем добавляю этот список в поле со списком для выбора температур – отлично работает.

Полученный список, скажем:

templist = ['25', '50', '100', '150', '200', '250', '300']. 

Затем я добавляю новое значение температуры, например «33» в базу данных.

Он добавляется в конец таблицы. Если я прочитаю температуру сейчас, список станет следующим:

 ['25', '50', '100', '150', '200', '250', '300', '33']. 

Если я делаю templist.sort() или sorted(templist) , конечный результат

 ['150', '200', '25', '250', '300', '33', '50'] 

Есть ли простой способ сортировки списка в порядке возрастания, так что я получаю:

 ['25', '33', '50', '100', '150', '200', '250', '300'] 

2 Solutions collect form web for “Python – как отсортировать список числовых значений в порядке возрастания”

Рекомендуемым подходом в этом случае является сортировка данных в базе данных, добавление ORDER BY в конце запроса, который извлекает результаты, примерно так:

 SELECT temperature FROM temperatures ORDER BY temperature ASC; -- ascending order SELECT temperature FROM temperatures ORDER BY temperature DESC; -- descending order 

Если по какой-то причине это не вариант, вы можете изменить порядок сортировки, как это в Python:

 templist = [25, 50, 100, 150, 200, 250, 300, 33] sorted(templist, key=int) # ascending order > [25, 33, 50, 100, 150, 200, 250, 300] sorted(templist, key=int, reverse=True) # descending order > [300, 250, 200, 150, 100, 50, 33, 25] 

Как отмечалось в комментариях, для правильной сортировки данных требуется int ключа (или float если хранятся значения с десятичными знаками), если полученные данные имеют string типа, но было бы очень странно сохранять значения температуры как строки, если это так, вернитесь и исправьте проблему в корне, и убедитесь, что сохраненные температуры являются числами.

в python sorted как вы хотите, с целыми числами:

 >>> sorted([10,3,2]) [2, 3, 10] 

похоже, что у вас есть проблема, потому что вы используете строки:

 >>> sorted(['10','3','2']) ['10', '2', '3'] 

(потому что порядок строк начинается с первого символа, а «1» – до «2», независимо от того, какие символы следуют), который можно зафиксировать с помощью key=int

 >>> sorted(['10','3','2'], key=int) ['2', '3', '10'] 

который преобразует значения в целые числа во время сортировки (он вызывается как функция – int('10') возвращает целое число 10 )

и, как предложено в комментариях, вы также можете сортировать список, а не генерировать новый:

 >>> l = ['10','3','2'] >>> l.sort(key=int) >>> l ['2', '3', '10'] 

но я бы посмотрел, почему у вас есть строки вообще. вы должны иметь возможность сохранять и извлекать целые числа. похоже, что вы сохраняете строку, когда вы должны сохранять int? (sqlite необычен среди баз данных, так как он хранит данные в том же типе, что и он, даже если тип столбца таблицы отличается).

и как только вы начнете сохранять целые числа, вы также можете получить список, отсортированный из sqlite, добавив order by ... в команду sql:

 select temperature from temperatures order by temperature; 
  • Каков наиболее эффективный способ добавить элемент в список, только если его еще нет?
  • Каков наиболее эффективный способ удаления группы индексов из списка номеров в Python 2.7?
  • В Python, как мне индексировать список с другим списком?
  • Добавление словаря в список в aa loop Python
  • Преобразование словаря Python в список
  • Python List Consrehension Vs. карта
  • Как должен быть извлечен определенный процент равномерно распределенных элементов списка Python?
  • Внутренние списки Python, доступ и изменение времени автономной работы
  • Python - лучший язык программирования в мире.