Python教程:sort和sorted实现排序之对比

cnblogs 2024-07-10 16:09:00 阅读 69

总的来说,sort 是应用在列表上的方法,修改原始列表。

内建函数 sorted 可对所有可迭代的对象进行排序操作,返回新的对象。

list.sort() 方法效率会比 sorted(iter) 稍微高些。

一、sort函数

sort() 函数用于对原列表进行排序,如果指定参数,则依据指定的函数进行排序。

列表才可以进行修改,元组无法修改。

1.语法

<code>list.sort(cmp=None, key=None, reverse=False)

# cmp参数在python2.0中存在

# 3.0版本已删除

2.参数

cmp -- 可选 使用该参数方法进行排序

key -- 用来进行比较的元素 取自可迭代对象

reverse -- 排序规则

  • reverse=True -- 降序
  • reverse=False -- 升序(默认)

该方法对原始列表进行排序,无返回。

3.实操

# 升序

aList = [5, 4, 1, 3, 6, 2]

aList.sort() # [1, 2, 3, 4, 5, 6]

# 降序

aList = [5, 4, 1, 3, 6, 2]

aList.sort(reverse=True)

aList # [6, 5, 4, 3, 2, 1]

# 指定元素排序

# 获取列表第2个元素

def takeSecond(elem):

return elem[1]

# 列表

random = [(2, 2), (3, 4), (4, 1), (1, 3)]

random.sort(key=takeSecond)

random # [(4, 1), (2, 2), (1, 3), (3, 4)]

# 按长度

x = ['a', 'bbb', 'cc']

x.sort(key=len)

print(x) # ['a', 'cc', 'bbb']

# 自定义比较函数

def comp(x, y):

if x < y:

return 1

elif x > y:

return -1

else:

return 0

aList = [5, 4, 1, 3, 6, 2]

aList.sort(comp) # 降序 2.0版本才支持

# 测试的当前版本不支持

4.其他技巧

生成一个排序好的副本,以及原始列表不变。

# 方法一

aList = [5, 4, 1, 3, 6, 2]

bList = aList[:] # 深度copy

# bList = aList.copy()

bList.sort()

print(aList) # [5, 4, 1, 3, 6, 2]

print(bList) # [1, 2, 3, 4, 5, 6]

# 方法二 使用sorted

aList = [5, 4, 1, 3, 6, 2]

bList = sorted(aList) # [1, 2, 3, 4, 5, 6]

通过切片操作进行拷贝,不可简单的进行赋值,否则指向的还是同一个存储地址的列表。

二、sorted函数

sorted() 函数对所有可迭代的对象进行排序操作。

1.语法

sorted(iterable, key=None, reverse=False)

2.参数

iterable -- 可迭代对象

key -- 指定可迭代对象中的一个元素

reverse -- 排序规则 降序、升序

该函数返回重新排序的列表,注意返回的都是列表。

3.实操

# 默认排序

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

sorted(a) # [1, 2, 3, 4, 5]

# 字典

b = {1: 'D', 2: 'B', 3: 'B', 4: 'E', 5: 'A'}

sorted(b) # [1, 2, 3, 4, 5]

# 按key排序,同时将key返回为一个列表

# 按键排序

sorted(b.items(), key=lambda x: x[0])

#学习中遇到问题没人解答?小编创建了一个Python学习交流群:725638078

# 按值长度排序

sorted(b.items(), key=lambda x: len(x[1]))

4.其他

# 奖牌排行

s = "德国 10 11 16\n意大利 10 10 20\n荷兰 10 12 14\n法国 10 12 11\n英国 22 21 22\n中国 38 32 18\n日本 27 14 17\n美国 39 41 33\n俄罗斯奥委会 20 28 23\n澳大利亚 17 7 22\n匈牙利 6 7 7\n加拿大 7 6 11\n古巴 7 3 5\n巴西 7 6 8\n新西兰 7 6 7"

stodata = s.split('\n', -1)

para = {}

for line in range(len(stodata)):

data = stodata[line].split(' ')

print(data)

para[data[0]] = [int(i) for i in data[1:]]

new_para = sorted(para.items(), key=lambda x: (x[1], x[0]))



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。