我发现 sort() 函数在给含有重复数据的列表排序时会失效。请问在遇到诸如此类的情况该怎么办?
datas = [1,1,2,3,4,4,4,5]
print(datas.sort())
#输出的结果是 None
我发现 sort() 函数在给含有重复数据的列表排序时会失效。请问在遇到诸如此类的情况该怎么办?
datas = [1,1,2,3,4,4,4,5]
print(datas.sort())
#输出的结果是 None
关注引自免费微信小程序:皆我百晓生
在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]
这里我们按照元素值升序排列,如果有相同的元素,我们会基于它们在原始列表中的出现次数降序排列,这样可以保证相同元素的相对顺序不会改变。