Python – 如何按升序对数值列表进行sorting

我创build了一个sqlite数据库,其中有一个存储温度值的表。 温度值首次以升序写入数据库。 然后我从数据库中读取温度值到列表中,然后将该列表添加到combobox中以select温度 – 工作良好。

结果列表是,说:

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'] 

有没有简单的方法来按升序对列表进行sorting,以便得到:

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

在这种情况下,推荐的方法是对数据库中的数据进行sorting,在查询结束时添加一个ORDER BY来获取结果,如下所示:

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

如果由于某种原因,这不是一个选项,你可以在Python中像这样改变sorting顺序:

 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] 

正如在注释中指出的那样,如果接收到的数据是stringtypes,则要求对数据进行正确sorting时, int键(或float如果存在带小数的值)正确存储),但将温度值存储为string,如果是这种情况,请返回并修复问题的根源,并确保存储的温度是数字。

在pythonsorted作品,就像你想要整数:

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

它看起来像你有一个问题,因为你使用的string:

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

(因为string顺序是从第一个字符开始的,“1”在“2”之前,不pipe后面跟着什么字符)可以用key=int

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

在sorting过程中将值转换为整数(它被称为函数 – int('10')返回整数10

并按照注释中的build议,也可以对列表本身进行sorting,而不是生成一个新列表:

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

但我会研究为什么你有string。 你应该可以保存和检索整数。 看起来你应该保存一个int时保存一个string? (sqlite在数据库中是不寻常的,因为即使表列types不同,sqlite也会以相同的types存储数据。

并且一旦你开始保存整数,你也可以order by ...在sql命令中joinorder by ...得到从sqlite中sorting的列表:

 select temperature from temperatures order by temperature;