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']

猜你喜欢

转载自blog.csdn.net/LiuXF93/article/details/121607563