翼度科技»论坛 编程开发 python 查看内容

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

4

主题

4

帖子

12

积分

新手上路

Rank: 1

积分
12
总的来说,sort 是应用在列表上的方法,修改原始列表。
内建函数 sorted 可对所有可迭代的对象进行排序操作,返回新的对象。
list.sort() 方法效率会比 sorted(iter) 稍微高些。
一、sort函数

sort() 函数用于对原列表进行排序,如果指定参数,则依据指定的函数进行排序。
列表才可以进行修改,元组无法修改。
1.语法
  1. list.sort(cmp=None, key=None, reverse=False)
  2. # cmp参数在python2.0中存在
  3. # 3.0版本已删除
复制代码
2.参数

cmp -- 可选 使用该参数方法进行排序
key -- 用来进行比较的元素 取自可迭代对象
reverse -- 排序规则

  • reverse=True -- 降序
  • reverse=False -- 升序(默认)
该方法对原始列表进行排序,无返回。
3.实操
  1. # 升序
  2. aList = [5, 4, 1, 3, 6, 2]
  3. aList.sort() # [1, 2, 3, 4, 5, 6]
  4. # 降序
  5. aList = [5, 4, 1, 3, 6, 2]
  6. aList.sort(reverse=True)
  7. aList # [6, 5, 4, 3, 2, 1]
  8. # 指定元素排序
  9. # 获取列表第2个元素
  10. def takeSecond(elem):
  11.     return elem[1]
  12. # 列表
  13. random = [(2, 2), (3, 4), (4, 1), (1, 3)]
  14. random.sort(key=takeSecond)
  15. random # [(4, 1), (2, 2), (1, 3), (3, 4)]
  16. # 按长度
  17. x = ['a', 'bbb', 'cc']
  18. x.sort(key=len)
  19. print(x) # ['a', 'cc', 'bbb']
  20. # 自定义比较函数
  21. def comp(x, y):
  22.     if x < y:
  23.         return 1
  24.     elif x > y:
  25.         return -1
  26.     else:
  27.         return 0
  28. aList = [5, 4, 1, 3, 6, 2]
  29. aList.sort(comp) # 降序  2.0版本才支持
  30. # 测试的当前版本不支持
复制代码
4.其他技巧

生成一个排序好的副本,以及原始列表不变。
  1. # 方法一
  2. aList = [5, 4, 1, 3, 6, 2]
  3. bList = aList[:]  # 深度copy
  4. # bList = aList.copy()
  5. bList.sort()
  6. print(aList) # [5, 4, 1, 3, 6, 2]
  7. print(bList) # [1, 2, 3, 4, 5, 6]
  8. # 方法二 使用sorted
  9. aList = [5, 4, 1, 3, 6, 2]
  10. bList = sorted(aList) # [1, 2, 3, 4, 5, 6]
复制代码
通过切片操作进行拷贝,不可简单的进行赋值,否则指向的还是同一个存储地址的列表。
二、sorted函数

sorted() 函数对所有可迭代的对象进行排序操作。
1.语法
  1. sorted(iterable, key=None, reverse=False)
复制代码
2.参数

iterable -- 可迭代对象
key -- 指定可迭代对象中的一个元素
reverse -- 排序规则 降序、升序
该函数返回重新排序的列表,注意返回的都是列表。
3.实操
  1. # 默认排序
  2. a = [5, 2, 3, 1, 4]
  3. sorted(a) # [1, 2, 3, 4, 5]
  4. # 字典
  5. b = {1: 'D', 2: 'B', 3: 'B', 4: 'E', 5: 'A'}
  6. sorted(b) # [1, 2, 3, 4, 5]
  7. # 按key排序,同时将key返回为一个列表
  8. # 按键排序
  9. sorted(b.items(), key=lambda x: x[0])
  10. #学习中遇到问题没人解答?小编创建了一个Python学习交流群:725638078
  11. # 按值长度排序
  12. sorted(b.items(), key=lambda x: len(x[1]))
复制代码
4.其他
  1. # 奖牌排行
  2. 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"
  3. stodata = s.split('\n', -1)
  4. para = {}
  5. for line in range(len(stodata)):
  6.     data = stodata[line].split(' ')
  7.     print(data)
  8.     para[data[0]] = [int(i) for i in data[1:]]
  9. new_para = sorted(para.items(), key=lambda x: (x[1], x[0]))
复制代码
来源:https://www.cnblogs.com/python1111/p/18294199
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具