python的sort()函数用法详解

一. 详解

  • 语法

    • list.sort(cmp=None, key=None, reverse=False)
  • 参数

    • cmp :可选参数, 如果指定了该参数会使用该参数的方法进行排序。
    • key : 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
    • reverse :排序规则,reverse = True 降序, reverse = False 升序(默认)
  • 输出

    • 该方法没有返回值,但是会对列表的对象进行排序。

二.用法举例

  • 1.按照ASCII升序排序
aList = ['123', 'Google', 'Runoob', 'Taobao', 'Facebook'];
aList.sort();
print(aList)
['123', 'Facebook', 'Google', 'Runoob', 'Taobao']
  • 2.降序输出列表
vowels = ['e', 'a', 'u', 'o', 'i']
 
# 降序
vowels.sort(reverse=True)
 
# 输出结果
print('降序输出:')
print( vowels )
降序输出:
['u', 'o', 'i', 'e', 'a']
  • 3.按照函数排序
# 获取列表的第二个元素
def takeSecond(elem):
    return elem[1]
 
# 列表
random = [(2, 2), (3, 4), (4, 1), (1, 3)]
 
# 指定第二个元素排序
random.sort(key=takeSecond)
 
# 输出类别
print('排序列表:')
print(random)
排序列表:
[(4, 1), (2, 2), (1, 3), (3, 4)]
  • 4.按照元祖排序
items = [(1, 'B'), (1, 'A'), (2, 'A'), (0, 'B'), (0, 'a')]
items.sort()
print(items)
[(0, 'B'), (0, 'a'), (1, 'A'), (1, 'B'), (2, 'A')]

三. Leetcode 937. 重新排列日志文件

链接:https://leetcode-cn.com/problems/reorder-data-in-log-files/

给你一个日志数组 logs。每条日志都是以空格分隔的字串,其第一个字为字母与数字混合的 标识符 。

有两种不同类型的日志:

  • 字母日志:除标识符之外,所有字均由小写字母组成
  • 数字日志:除标识符之外,所有字均由数字组成
  • 请按下述规则将日志重新排序:

所有 字母日志 都排在 数字日志 之前。

  • 字母日志 在内容不同时,忽略标识符后,按内容字母顺序排序;在内容相同时,按标识符排序。
  • 数字日志 应该保留原来的相对顺序。
  • 返回日志的最终顺序。

输入:logs = [“dig1 8 1 5 1”,“let1 art can”,“dig2 3 6”,“let2 own kit dig”,“let3 art zero”]
输出:[“let1 art can”,“let3 art zero”,“let2 own kit dig”,“dig1 8 1 5 1”,“dig2 3 6”]
解释:
字母日志的内容都不同,所以顺序为 “art can”, “art zero”, “own kit dig” 。
数字日志保留原来的相对顺序 “dig1 8 1 5 1”, “dig2 3 6” 。

输入:logs = [“a1 9 2 3 1”,“g1 act car”,“zo4 4 7”,“ab1 off key dog”,“a8 act zoo”]
输出:[“g1 act car”,“a8 act zoo”,“ab1 off key dog”,“a1 9 2 3 1”,“zo4 4 7”]

解答:

class Solution:
    def reorderLogFiles(self, logs: List[str]) -> List[str]:
        def trans(log: str) -> tuple:
            a, b = log.split(' ', 1)    # a:标识符, b:标识符以外的内容
            return (0, b, a) if b[0].isalpha() else (1,) # 首先按0,1排序,是字母,即0时,按b排序,b相等时按a排序

        logs.sort(key=trans)  
        return logs

四. sort()和sorted()的区别

  • sort是在原位重新排列列表,无返回值,而sorted()是产生一个新的列表,有返回值
  • sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作
item.sort()
new_item = sorted(item)

猜你喜欢

转载自blog.csdn.net/qq_35759272/article/details/124564586