levels of contents

Python sort()和sorted()

Python sort()和sorted()

sort 与 sorted 区别:

sort()

sort()是列表list的方法之一

L.sort(key=None, reverse=False)

sorted()

sorted() 函数可以对任意可迭代对象排序。返回一个列表

sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。

list 的 sort 方法返回的是对已经存在的列表进行操作,无返回值,而内建函数 sorted 方法返回的是一个新的list,而不是在原来的基础上进行的操作

# sorted()语法
sorted(iterable[, cmp[, key[, reverse]]])

参数说明:

  • iterable -- 可迭代对象
  • cmp -- 比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0
  • key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序
  • reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)

单个排序法则:

students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
new_students = sorted(students, key=lambda s: s[2])
print(new_students)  # [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

多种排序法则:

s = 'asdf234GDSdsf234578'  # 排序:小写-大写-奇数-偶数
new_s1 = "".join(sorted(s, key=lambda x: [x.isdigit(), x.isdigit() and int(x) % 2 == 0, x.isupper(), x]))
print(new_s1)  # addffssDGS335722448

原理:

print(sorted([True, False]))  # [False, True]
# Boolean 的排序会将 False 排在前,True排在后  
  1. x.isdigit()的作用把iterable分成两部分,数字和非数字,数字在后,非数字在前

    new_s1 = "".join(sorted(s, key=lambda x: [x.isdigit()]))
    print(new_s1)  # asdfGDSdsf234234578
    
  2. x.isdigit() and int(x) % 2 == 0的作用是将数字部分分成两部分,偶数(在后)和奇数(在前)

    new_s1 = "".join(sorted(s, key=lambda x: [x.isdigit(), x.isdigit() and int(x) % 2 == 0]))
    print(new_s1)  # asdfGDSdsf335724248
    
  3. x.isupper()的作用是在前面基础上,保证字母小写在前大写在后

    new_s1 = "".join(sorted(s, key=lambda x: [x.isdigit(), x.isdigit() and int(x) % 2 == 0, x.isupper()]))
    print(new_s1)  # asdfdsfGDS335724248
    
  4. 最后的x表示在前面基础上,对所有类别数字或字母排序

    new_s1 = "".join(sorted(s, key=lambda x: [x.isdigit(), x.isdigit() and int(x) % 2 == 0, x.isupper(), x]))
    print(new_s1)  # addffssDGS335722448
    

一道面试题

lst = [7, -8, 5, 4, 0, -2, -5]

要求:

  1. 正数在前负数在后
  2. 正数从小到大
  3. 负数从大到小
lst = [7, -8, 5, 4, 0, -2, -5]
new_lst1 = sorted(lst, key=lambda x: [x < 0, x < 0 and -x, x >= 0 and x])  # -3 < 0 and -(-3) ==> 3
new_lst2 = sorted(lst, key=lambda x: [x < 0, abs(x)])
print(new_lst1)  # [0, 4, 5, 7, -2, -5, -8]
print(new_lst2)  # [0, 4, 5, 7, -2, -5, -8]
posted @ 2019-06-23 21:09  panky  阅读(439)  评论(0编辑  收藏  举报