对一组值进行排序

Jus*_*rey 92 python

我有这样的价值观:

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'])  
Run Code Online (Sandbox Code Playgroud)

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

aba*_*ert 185

来自评论:

我想对每一组进行排序.

这很简单.对于任何集合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']
Run Code Online (Sandbox Code Playgroud)

请注意,这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']
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅官方文档中的排序HOWTO.


*请参阅有关例外的评论.

  • 你不会在维基百科页面上找到关于数学集的单词"unordered".你也找不到"有序"这个词.那是因为它与集合上的数学运算无关.特定语言是否选择生成有序集是实现细节.http://en.wikipedia.org/wiki/Set_(mathematics) (5认同)
  • @TimothyShields:同时,您链接的Set(数学)上的维基百科页面没有"无序"这个词,因为它已经从定义中显而易见了.特别是,"当且仅当它们具有完全相同的元素时,集合A和B是相等的".对于有序集合而言,情况并非如此.(也有类似的句子:"列出集合或多集的元素的顺序是无关紧要的",所以如果你只是稍微不同地搜索,你甚至可以在不理解这个概念的情况下找到它.) (3认同)
  • @TimothyShields:但是`std :: set` _does_暴露了排序(不仅仅是通过API的明显方式;排序函数实际上是任何给定集的type_的_part).元素始终按严格的弱顺序排序的事实是概念定义的一部分.所以,你的论点没有实际意义.但即使不是,为什么重要呢?几乎每种编程语言中的集合都是无序的,就像它们在数学中一样.事实上,有一种外围语言使用这个词来表示别的东西并不会使这种说法变得不那么真实. (3认同)
  • 无论这个名字的好坏,都不是讨论的内容."集合永远不会以任何语言排序"的陈述是错误的. (2认同)