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]
正如在注释中指出的那样,如果接收到的数据是string
types,则要求对数据进行正确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;