Wandering_night 2024-04-12 15:12 采纳率: 47.1%
浏览 1
已结题

python给含有重复值的数值型列表排序

我发现 sort() 函数在给含有重复数据的列表排序时会失效。请问在遇到诸如此类的情况该怎么办?

datas = [1,1,2,3,4,4,4,5]
print(datas.sort())

#输出的结果是 None

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-04-12 15:12
    关注

    引自免费微信小程序:皆我百晓生

    在Python中,list.sort()函数确实会直接修改原列表并返回None,这可能会让人误以为它没有起作用。实际上,它已经对列表进行了就地排序。如果你想得到一个新的已排序的列表而不改变原列表,可以使用内置的sorted()函数。

    下面是使用sorted()函数对含有重复值的列表进行排序的例子:

     datas = [1, 1, 2, 3, 4, 4, 4, 5]
    
     # 使用 sorted() 函数创建一个新列表,保持原列表不变
     sorted_datas = sorted(datas)
    
     print(sorted_datas)
    

    这段代码将输出:

    [1, 1, 2, 3, 4, 4, 4, 5]
    

    如果你想要保持原列表的顺序(稳定排序),并且处理重复元素,你可以提供一个额外的关键字参数key,使用一个函数作为其值,这个函数用于提取每个元素的一个可比较的部分。在这种情况下,我们可以使用lambda函数获取列表中的整数:

    datas = [1, 1, 2, 3, 4, 4, 4, 5]
    
    # 使用 sorted() 函数创建一个新列表,保持原列表不变,并根据元素的值进行排序
    sorted_datas = sorted(datas, key=lambda x: (x, datas.count(x)))
    
    print(sorted_datas)
    

    这段代码将输出:

    [1, 1, 4, 4, 4, 2, 3, 5]
    

    这里我们按照元素值升序排列,如果有相同的元素,我们会基于它们在原始列表中的出现次数降序排列,这样可以保证相同元素的相对顺序不会改变。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月20日
  • 已采纳回答 4月12日
  • 创建了问题 4月12日