Python列表排序实战:内置函数与常用算法详解

Ada
Ada
发布时间:2026-10-13| 2人浏览过
原创

本文详细介绍Python中实现列表排序的多种方法。首先解析内置函数list.sort()与sorted()的区别及参数用法,包括cmp、key和reverse。随后深入讲解冒泡、选择、插入、快速及希尔排序等经典算法的实现逻辑与代码示例,帮助开发者掌握从基础调用到底层算法的完整排序技能。

Python列表排序概述

排序是各类编程语言中处理数据的核心操作之一。在Python中,针对列表数据的排序有多种实现路径,本文将基于列表数据结构展开具体说明。

内置排序函数详解

一、利用Python内置函数进行排序

Python提供了便捷的内置函数来直接调用并完成排序任务,无需额外编写复杂逻辑。

Python列表对象包含一个内置的list.sort()方法,该方法会直接修改原列表。此外,还有一个内置函数sorted(),它能够接收任何可迭代对象并返回一个新的已排序列表。

1. sort()函数:


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

该函数的参数定义如下:

cmp -- 可选参数,若指定此参数,则使用指定的比较方法进行排序。

key -- 指定用于比较的元素,该参数仅接受一个值,具体取自可迭代对象中的元素,用于确定排序依据。

reverse -- 控制排序规则,当reverse = True时为降序排列,reverse = False时为升序排列(默认值)。

若未指定特殊参数,直接输入列表即可进行默认排序,示例如下:


list=[1,2,4,5,3]
list.sort()
print(list)
>>>[1,2,3,4,5]

2. sorted()函数:


sorted(iterable, cmp=None, key=None, reverse=False)

其参数说明如下:

iterable -- 指定需要排序的可迭代对象。

cmp -- 比较函数,该函数接收两个参数,值均从可迭代对象中取出。函数需遵循比较规则:若前者大于后者返回1,小于则返回-1,相等返回0。

key -- 主要用于指定比较元素,该参数仅有一个值,具体取自可迭代对象中的元素,用于指定排序的关键字段。

reverse -- 排序规则设置,reverse = True表示降序,reverse = False表示升序(默认)。

同样地,使用sorted()函数也能对列表进行排序,示例如下:


list=[1,2,4,5,3]
print(sorted(list))
>>>[1,2,3,4,5]

尽管sort()和sorted()都能实现排序功能,但二者存在显著差异:

sort()与sorted()的主要区别:

sort()是列表对象的方法,仅适用于list类型;而sorted()函数适用于所有可迭代对象。

list的sort()方法直接在原列表上进行操作,不返回新列表(返回None);而内置函数sorted()则返回一个全新的排序后的列表,原列表保持不变。

此外,还可以利用列表的翻转(reverse)、升序(sort)、降序(sorted)以及按长度排序等技巧。


list4 = [10,10,50,20,30,60,51,20,10,10]
print(list4)
list4.reverse()               #翻转
print(list4)
 
list4.sort()
print(list4)            #升序排列,直接对表进行操作
 
list4.sort(reverse=True)
print(list4)            #降序排列
 
list41 = [10,10,50,20,30,60,51,20,10,10]
print(sorted(list41))        #升序排列,生成一个新表
print(list41)
 
print(sorted(list41,reverse=True)) #降序排列,从之前的列表中挑选出元素组成新的表
print(list41) 
 
list43 = ["fddg","gfdggfg","f"]  #按照长度进行排序,生成新的列表
print(sorted(list43,key=len))

经典排序算法实现

二、使用常见排序算法进行排序

与高级内置函数类似,Python也支持通过基础语句实现各类经典排序算法。

1. 冒泡排序

冒泡排序是基础且常见的排序算法。其核心思想是相邻元素两两比较,将较大元素向后移动(正向排序)。经过一轮比较后,最大元素会沉至末尾,如同水中上升的气泡逐渐变大。


def bubble_sort(list):
  count = len(list)
  for i in range(count):
    for j in range(i + 1, count):
      if list[i] > list[j]:
        list[i], list[j] = list[j], list[i]
  return list

2. 选择排序

选择排序的逻辑是:第一轮遍历所有元素并与第一个元素比较,若比第一个元素大则交换,一轮结束后找到最小元素;第二轮遍历剩余元素并与第二个位置元素比较,以此类推确定后续位置元素。


def selection_sort(list):
  length = len(list)
  for i in range(length - 1, 0, -1):
    for j in range(i):
      if list[j] > list[i]:
        list[j], list[i] = list[i], list[j]
    return list

3. 插入排序

插入排序的核心思想是将一个新数据插入到已排好序的序列中,从而生成一个新的、元素数量加一的有序序列。该算法适用于少量数据排序,时间复杂度为O(n^2),且属于稳定排序。算法将数组分为两部分:第一部分包含所有元素但预留最后一个元素的空间,第二部分仅包含待插入元素。待第一部分排序完成后,将最后元素插入到已排序的第一部分中。


def insert_sort(list):
  count = len(list)
  for i in range(1, count):
    key = list[i]
    j = i - 1
    while j >= 0:
      if list[j] > key:
        list[j + 1] = list[j]
        list[j] = key
      j -= 1
  return list

4. 快速排序

快速排序的核心思想是:通过一趟排序将待排数据分割成独立的两部分,其中一部分的所有数据均小于另一部分的所有数据。随后递归地对这两部分数据分别进行快速排序,直至整个数据序列变为有序。


def quick_sort(list, left, right): 
  if left >= right:
    return list
  key = lists[left]
  low = left
  high = right
  while left < right:
    while left < right and list[right] >= key:
      right -= 1
    lists[left] = lists[right]
    while left < right and list[left] <= key:
      left += 1
    list[right] = list[left]
  list[right] = key
  quick_sort(list, low, left - 1)
  quick_sort(list, left + 1, high)
  return list

lst1 = raw_input().split()  #调用函数
lst = [int(i) for i in lst1]
#lst = input()
quick_sort(lst,0,len(lst)-1)
for i in range(len(lst)):
  print lst[i],

5. 希尔排序

希尔排序是插入排序的高效改进版本,也称为缩小增量排序,属于非稳定排序算法。该算法由DL.Shell于1959年提出。其做法是将记录按下标的一定增量分组,对每组使用直接插入排序算法;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法随即终止。


def shell_sort(list):
  count = len(list)
  step = 2
  group = count / step
  while group > 0:
    for i in range(group):
      j = i + group
      while j < count:
        k = j - group
        key = list[j]
        while k >= 0:
          if list[k] > key:
            list[k + group] = list[k]
            list[k] = key
          k -= group
        j += group
    group /= step
  return list

以上内容涵盖了Python列表排序的主要方法,希望能为读者的学习提供有益参考,欢迎继续支持本站获取更多技术资讯。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。