Python数据排序方法用法介绍

AS3J4 数码 4

本文将详细介绍Python在不同场景下给数据排序的方法,包括常见的排序算法、常用的排序函数、应用场景以及代码实现等,以帮助读者更好地理解和掌握Python排序功能。

在Python中,排序算法主要包括冒泡排序、选择排序、插入排序、快速排序、归并排序等。下面分别介绍它们的实现原理及代码实现。

冒泡排序的基本思想是:相邻的两个元素进行比较,如果左边的值大于右边的值,则交换位置,如此反复直到排序完成。


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

选择排序的基本思想是:每次从待排序的数据中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余未排序的元素中继续寻找最小(或最大)的元素,放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素排完。


def selection_sort(arr):
    n = len(arr)
    for i in range(n - 1):
        min_index = i
        for j in range(i + 1, n):
            if arr[j] < arr[min_index]:
                min_index = j
        arr[i], arr[min_index] = arr[min_index], arr[i]
    return arr

插入排序的基本思想是:将待排序的数据分为两个部分,一部分是已经排好序的,一部分是未排序的。从未排序的部分中选择一个元素,插入到已经排好序的部分中,以此实现元素的逐一有序插入。


def insertion_sort(arr):
    n = len(arr)
    for i in range(1, n):
        j = i
        while j > 0 and arr[j] < arr[j - 1]:
            arr[j], arr[j - 1] = arr[j - 1], arr[j]
            j -= 1
    return arr

快速排序的基本思想是:通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小。然后分别对这两部分记录继续进行排序,重复以上过程,直到整个序列有序。


def quick_sort(arr):
    if len(arr) <= 1:
        return arr
    pivot = arr[0]
    left = [x for x in arr[1:] if x = pivot]
    return quick_sort(left) + [pivot] + quick_sort(right)

归并排序的基本思想是:将待排序的序列分成若干个子序列,每个子序列都是有序的。然后将这些子序列合并为一个有序的序列。


def merge_sort(arr):
    if len(arr) <= 1:
        return arr
    mid = len(arr) // 2
    left = merge_sort(arr[:mid])
    right = merge_sort(arr[mid:])
    return merge(left, right)

def merge(left, right):
    res = []
    i = j = 0
    while i < len(left) and j < len(right):
        if left[i] <= right[j]:
            res.append(left[i])
            i += 1
        else:
            res.append(right[j])
            j += 1
    res += left[i:]
    res += right[j:]
    return res

Python内置了很多方便快捷的排序函数,常用的包括sort()、sorted()、heapq.nlargest()、heapq.nsmallest()等,下面分别介绍它们的用法。

sort()方法是Python内置的列表排序函数,它将一个列表按照从小到大的顺序进行排序,可以选择降序排列。


a = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
a.sort()  # 默认是升序
print(a)
a.sort(reverse=True)  # 降序排列
print(a)

sorted()函数可以对任何可迭代对象进行排序,包括列表、元组、字符串等,返回一个新的已排序的列表。


a = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
a_new = sorted(a)
print(a_new)

heapq.nlargest()方法可以返回一个列表中最大的n个元素,它还可以接受一个关键字函数,用于自定义比较函数。


import heapq
a = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
largest_3 = heapq.nlargest(3, a)
print(largest_3)
largest_3 = heapq.nlargest(3, a, key=lambda x: -x)
print(largest_3)

heapq.nsmallest()方法可以返回一个列表中最小的n个元素,语法与heapq.nlargest()类似。


import heapq
a = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
smallest_3 = heapq.nsmallest(3, a)
print(smallest_3)
smallest_3 = heapq.nsmallest(3, a, key=lambda x: -x)
print(smallest_3)

数据排序在很多实际应用场景中都被广泛使用,下面介绍一些具体的应用场景。

数据库中的数据需要按照一定的规则排序,以便于查询和统计。常见的排序规则包括升序、降序、多列排序等。


SELECT * FROM table_name ORDER BY column1 DESC, column2 ASC

在机器学习中,数据排序也是一个非常重要的问题,比如在分类、聚类、回归等任务中,常常需要对数据进行排序和归一化处理。

排行榜是对某些指标进行排序的结果,常见的排行榜包括各种比赛的排名、评估学校或企业的综合实力、推荐音乐、电影等。

以下是一个排序案例,分别使用sort()和sorted()方法对数据进行排序,并计算排序时间以及输出排序结果。


import random
import time

# 生成随机数据
data = [random.randint(1, 10000) for _ in range(10000)]

# 记录sort()方法的排序时间
start_time = time.time()
data.sort()
end_time = time.time()
sort_time = end_time - start_time

# 记录sorted()函数的排序时间
start_time = time.time()
data_sorted = sorted(data)
end_time = time.time()
sorted_time = end_time - start_time

# 输出排序结果和时间
print("sort()方法排序结果:", data)
print("sorted()函数排序结果:", data_sorted)
print("sort()方法排序时间:%.6f 秒" % sort_time)
print("sorted()函数排序时间:%.6f 秒" % sorted_time)

回复

共1条回复 我来回复
  • 暂无回复内容