对一组值进行排序

我的价值观是这样的:

set(['0.000000000', '0.009518000', '10.277200999', '0.030810999', '0.018384000', '4.918560000'])
set(['4.918859000', '0.060758000', '4.917336999', '0.003949999', '0.013945000', '10.281522000', '0.025082999'])

我想对每个 set中的值按递增顺序进行排序。我不想在集合之间排序,而是每个集合中的值。

329563 次浏览

来自一则评论:

我想把每一套都分类。

很简单。对于任何集合 s(或任何其他可迭代的集合) ,sorted(s)按排序顺序返回 s元素的列表:

>>> s = set(['0.000000000', '0.009518000', '10.277200999', '0.030810999', '0.018384000', '4.918560000'])
>>> sorted(s)
['0.000000000', '0.009518000', '0.018384000', '0.030810999', '10.277200999', '4.918560000']

注意,sorted给出的是 list,而不是 set。这是因为在 数学几乎所有的编程语言 * 中,一个集合的全部意义在于它不是有序的: 集合 {1, 2}{2, 1}是相同的集合。


您可能不想将这些元素按字符串排序,而是按数字排序(因此4.918560000将出现在10.277200999之前,而不是之后)。

最好的解决方案是首先将数字存储为数字而不是字符串。但是如果没有,你只需要使用一个 key函数:

>>> sorted(s, key=float)
['0.000000000', '0.009518000', '0.018384000', '0.030810999', '4.918560000', '10.277200999']

有关更多信息,请参见官方文档中的 如何分类


查看异常评论 * 。

自 Python 3.7以来,dicts 保持插入顺序。因此,如果您希望订购一个集合,但仍然希望能够在常量时间内进行成员资格检查,那么可以使用 dict.fromkeys()(默认值为 None)从排序列表创建一个字典。

s = {10, 39, 3}


s_sorted = dict.fromkeys(sorted(s))               # ascending order
# {3: None, 10: None, 39: None}


s_sorted = dict.fromkeys(sorted(s, reverse=True)) # descending order
# {39: None, 10: None, 3: None}