Python高级用法——列表的sort及sorted
一、sort功能
sort() 、sorted()函数用于对原列表进行排序,如果指定参数,则使用比较函数指定的比较函数。
二、语法
list.sort(cmp=None, key=None, reverse=False)
sorted(iterable, cmp=None, key=None, reverse=False)
三、参数
- cmp – 可选参数, 如果指定了该参数会使用该参数的方法进行排序。
- key – 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
- reverse – 排序规则,reverse = True 降序, reverse = False 升序(默认)。
四、返回值
sort()没有返回值,但是会对列表的对象进行排序;sorted()会有返回值。
五、sort() 、sorted()的区别
- sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。
- list 的 sort 方法返回的是对已经存在的列表进行操作,无返回值,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。
六、示例
6.1 示例1
numslist = [1, 3, 5, 6, 8, 9]
numslist.sort(reverse = True)
print("降序输出:")
print(numslist)
numslist.sort(reverse = False)
print("升序输出: ")
print(numslist)
输出结果为
降序输出:
[1, 3, 5, 6, 8, 9]
升序输出:
[1, 3, 5, 6, 8, 9]
6.2 示例2
# 获取列表的第二个元素
def takeSecond(elem):
return elem[1]
# 列表
random = [(2, 2), (3, 4), (4, 1), (1, 3)]
# 指定第二个元素排序
random.sort(key=takeSecond)
# random.sort(key = lambda item:item[1])
# 输出类别
print('排序列表:')
print(random)
输出结果为:
排序列表:
[(4, 1), (2, 2), (1, 3), (3, 4)]
6.3 示例3
目的:如果元组里第一个元素是奇数,就用元组里第一个元素进行排序,如果元组里第一个元素是偶数,则用这个元组里的第二个元组进行大小比较。
from functools import cmp_to_key
lst = [(9, 4), (2, 10), (4, 3), (3, 6)]
def cmp(x, y):
a = x[0] if x[0] %2 == 1 else x[1]
b = y[0] if y[0] %2 == 1 else y[1]
return 1 if a > b else -1 if a < b else 0
lst.sort(key=cmp_to_key(cmp))
print(lst)
输出结果为:
[(4, 3), (3, 6), (9, 4), (2, 10)]
6.4 示例4
leetcode526相对名次
给你一个长度为 n 的整数数组 score ,其中 score[i] 是第 i 位运动员在比赛中的得分。所有得分都 互不相同 。
运动员将根据得分 决定名次 ,其中名次第 1 的运动员得分最高,名次第 2 的运动员得分第 2 高,依此类推。运动员的名次决定了他们的获奖情况:
名次第 1 的运动员获金牌 “Gold Medal” 。
名次第 2 的运动员获银牌 “Silver Medal” 。
名次第 3 的运动员获铜牌 “Bronze Medal” 。
从名次第 4 到第 n 的运动员,只能获得他们的名次编号(即,名次第 x 的运动员获得编号 “x”)。
使用长度为 n 的数组 answer 返回获奖,其中 answer[i] 是第 i 位运动员的获奖情况。
class Solution:
desc = ("Gold Medal", "Silver Medal", "Bronze Medal")
def findRelativeRanks(self, score):
ans = [""] * len(score)
arr = sorted(enumerate(score), key=lambda x: -x[1])
for i, (idx, _) in enumerate(arr):
ans[idx] = self.desc[i] if i < 3 else str(i + 1)
return ans
S = Solution()
RES = S.findRelativeRanks([10,3,8,9,4])
输出结果为:
['Gold Medal', '5', 'Bronze Medal', 'Silver Medal', '4']