代码之家  ›  专栏  ›  技术社区  ›  Abdulaziz

如何对集合内的列表进行排序[重复]

  •  0
  • Abdulaziz  · 技术社区  · 8 月前

    我有这样的价值观:

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

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

    0 回复  |  直到 8 月前
        1
  •  330
  •   abarnert    10 年前

    来自评论:

    我想对每套进行排序。

    这很容易。对于任何集合 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 。那是因为一组的全部点,都在 mathematics almost every programming language ,*是因为它没有排序:集合 {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']
    

    有关详细信息,请参阅 Sorting HOWTO 在官方文件中。


    *有关例外情况,请参见注释。

        2
  •  2
  •   cottontail    8 月前

    另一种方法是显式地将集合转换为列表(使用 list() 函数)并对列表进行排序。

    s = {10, 39, 3}
    
    s_list = list(s)
    s_list.sort()    # sort in-place
    # [3, 10, 39]
    

    自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}