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條回復 我來回復
  • 暫無回復內容