Python 列表 sort()函数使用理解

目录

前言

1、升序降序

2、sort()和sorted()的区别

3、切片排序

4、指定排序规则

4.1、按字符串长度排序

4.2、按第二个字符排序

4.3、查找第n大的元素

5、其他类型排序

总结

前言

在Python编程的广阔领域中,列表(List)是一种非常基础且强大的数据结构。它允许我们存储多个元素,并按需进行访问、修改和操作。在这些操作中,对列表进行排序是一个常见的需求,而Python的sort()函数正是为了满足这一需求而设计的。

sort()函数是Python内置的一种排序方法,它直接作用在列表上,对列表中的元素进行原地排序,即不生成新的列表,而是在原列表上进行修改。这一特性使得sort()函数在处理大型数据集时具有显著的性能优势,因为它避免了在内存中创建新的列表对象。

然而,仅仅知道sort()函数的基本用法是远远不够的。要真正掌握它,我们需要深入理解其工作原理、参数选项以及与其他排序方法的比较。在本篇文章中,我们将详细探讨sort()函数的各个方面,包括它的基本使用、参数设置、返回值类型,以及如何通过自定义排序规则来满足特定需求。

首先,我们将从sort()函数的基本语法和用法入手,介绍如何对列表进行升序和降序排序。接着,我们将探讨sort()函数的参数选项,如keyreverse,以及它们如何影响排序结果。此外,我们还将比较sort()函数与其他排序方法(如sorted()函数和内置排序算法)的异同,帮助读者选择最适合自己需求的排序方法。

最后,我们将通过一些实际案例来展示如何应用sort()函数解决具体问题。这些案例将涉及不同的数据类型和排序需求,旨在帮助读者更好地理解和掌握sort()函数的使用方法。

通过本文的学习,读者将能够深入理解Python列表的sort()函数,并掌握其在实际编程中的应用。无论你是Python初学者还是有一定经验的开发者,相信本文都能为你带来有价值的启示和帮助。

首先我们要知道sort() 可以对列表进行「排序」

语法

list.sort( key, reverse )


参数

key :#(可选)指定排序规则
reverse :#(可选)升序降序


返回值

返回None,同时将原列表排序。也就是没有返回值
案例:将列表中的元素排序

1.list1 = [1, 3, 2, 5]
2.list1.sort()
3.print(list1)

输出:

[1, 2, 3, 5]

1、升序降序


reverse 参数控制排序的「升序」和「降序」,True表示降序、False表示升序;默认升序reverse=False

1.list1 = [1, 3, 2, 5]
2.list1.sort(reverse=True)
3.print(list1)
4.list1.sort(reverse=False)
5.print(list1)
6.list1.sort()
7.print(list1)

输出:

[5, 3, 2, 1]
[1, 2, 3, 5]
[1, 2, 3, 5]

2、sort()和sorted()的区别


接收 sort() 的返回值,可以发现是None

输出:

1.list1 = [1, 3, 2, 5]
2.list2 = list1.sort()
3.print(list2

输出:

None

打印一下排序前、后的「内存地址」,可以发现地址没有改变

list1 = [1, 3, 2, 5]
print(id(list1))
list1.sort()
print(id(list1))

输出:

2361470487744
2361470487744

sort() 的设计思想就是「修改」原列表,而不是返回新的列表;
它不会创建新的列表,从而节省「效率」;
当然,这也意味着原列表被修改了,使用时要留意这一点;
sorted() 是 sort() 的扩展函数,可以对列表的元素排序,同时不会修改原列表。

list1 = [1, 3, 2, 5]
list2 = sorted(list1)
print(list1)
print(list2)

输出:

[1, 3, 2, 5]
[1, 2, 3, 5]

从结果可以看到, sorted() 创建了新的列表,用来保存排序后的列表。

3、切片排序


将原列表「切片」复制给新列表,再对新列表排序,同样可以实现排序且不改变原列表。

list1 = [1, 3, 2, 5]
list2 = list1[:]
list2.sort()
print(list1)
print(list2)

输出:

[1, 3, 2, 5]
[1, 2, 3, 5]

直接「赋值」的方式是不行的,因为赋值的话,两个列表会指向同一个内存地址,原列表会同步变化。

list1 = [1, 3, 2, 5]
list2 = list1
list2.sort()
print(list1)
print(list2)

输出:

[1, 2, 3, 5]
[1, 2, 3, 5]

4、指定排序规则


key 参数可以指定排序「规则」

4.1、按字符串长度排序


对于元素全是字符串的「列表」,可以按照字符串的「长度」来排序

list1 = ['aaaaa', 'aa', 'aaaa', 'a']
list1.sort(key=len)
print(list1)

输出:

['a', 'aa', 'aaaa', 'aaaaa']

本质上是利用字符串的 len() 函数计算长度,再排序,如果遇到 int 这列没有 len() 函数的元素,是会报错 TypeError: object of type ‘int’ has no len()。

4.2、按第二个字符排序


对于元素全是字符串的列表,可以按照元素的第几个「字符」排序。

list1 = ['cb', 'fa', 'zd', 'ec']
list1.sort(key=lambda x: x[1])
print(list1)

输出:

['fa', 'cb', 'ec', 'zd']


需要注意的是,所有元素的字符长度都要够数,比如元素只有1个字符,却按照第2个字符排序,函数找不到第2个字符,肯定会报错 IndexError: string index out of range

4.3、查找第n大的元素


先降序,再按照「索引」取值,就能获取列表中第一大的值或第二大的值等。

list1 = [4, 3, 9, 6, 1]
list1.sort(reverse=True)
print('最大的元素:', list1[0])
print('第二大的元素:', list1[1])

输出:

最大的元素: 9
第二大的元素: 6

5、其他类型排序


sort() 只能对列表排序,而 sorted() 能对可迭代对象排序;所以,字符串、元组、字典等类型想排序,可以用 sorted()

str1 = "312"
print(sorted(str1))

tuple1 = (5, 1, 3)
print(sorted(tuple1))

dict1 = {"key1": 1, "key2": 2}
print(sorted(dict1))

输出:

['1', '2', '3']
[1, 3, 5]
['key1', 'key2']

从输出结果可以发现,字符串、元组、字典类型排序后,返回的是列表类型;并且字典只对键排序,不对值排序。

总结

在本文中,我们深入探讨了Python列表的sort()函数,这是一种强大且灵活的工具,用于对列表中的元素进行排序。sort()函数直接修改原始列表,进行原地排序,这使其在处理大型数据集时具有显著的性能优势。

首先,我们介绍了sort()函数的基本语法和用法,包括如何对列表进行默认的升序排序。接着,我们详细讨论了sort()函数的两个重要参数:keyreversekey参数允许我们指定一个函数,该函数将用于在比较元素时提取用于排序的键;而reverse参数则用于控制排序的顺序,设置为True时进行降序排序。

此外,我们还比较了sort()函数与sorted()函数之间的区别。虽然两者都用于排序,但sorted()函数会返回一个新的已排序列表,而不修改原始列表。这使得sorted()函数在需要保留原始列表顺序的场合下特别有用。

最后,我们通过实际案例展示了如何应用sort()函数解决特定问题。这些案例涵盖了从简单到复杂的排序需求,包括处理数字、字符串和自定义对象等数据类型。通过这些案例,我们展示了如何使用key参数来定义自定义的排序规则,以满足不同场景下的需求。

综上所述,Python列表的sort()函数是一种强大且灵活的工具,它允许我们根据特定规则对列表中的元素进行排序。通过深入理解其工作原理、参数选项以及与其他排序方法的比较,我们可以更好地掌握其使用方法,并在实际编程中灵活运用。无论是处理简单的数字列表还是复杂的自定义对象列表,sort()函数都能为我们提供高效且可靠的排序解决方案

你可能感兴趣的:(python,爬虫,开发语言)