提高Python列表排序效率的最佳實踐

在Python編程中,列表是常見的數據類型,而對於這種數據類型的排序操作,往往是我們需要重點考慮的問題之一。由於Python擁有極為豐富的標準庫以及第三方庫,我們可以通過選取合適的排序函數,優化Python列表排序效率。

一、內置排序函數

在Python中,內置的sorted()和list.sort()函數都可以用來對列表進行排序。但是這兩者在使用時,會有一些小小的效率差別,這主要是由於Python的解釋器的運行機制不同導致的。

如果我們需要對原列表進行排序,我們可以使用list.sort()函數,它是原地排序,直接在原來的列表上排序。


    lst = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
    lst.sort()
    print(lst) # [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]

如果我們需要對一個列表進行排序操作,但又不希望直接修改原列表,可以使用sorted()函數。該函數會返回一個新列表,且不會在原列表上進行操作。


    lst = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
    new_lst = sorted(lst)
    print(new_lst) # [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]

二、NumPy庫的排序函數

NumPy是Python的一種開源科學計算庫,它擁有許多針對數組操作和科學計算的高效的函數。在進行科學計算時,經常需要對大量數據進行排序操作,這時候我們可以選用NumPy中的函數來提高代碼效率。

NumPy中的sort函數非常高效,在排序大量數據時,比Python自帶的排序函數快得多。其排序速度比內置函數快,主要在於sort使用了C語言進行了優化,使得排序效率更高。


    import numpy as np

    arr = np.array([3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5])
    sorted_arr = np.sort(arr)

    print(sorted_arr) # [1 1 2 3 3 4 5 5 5 6 9]

三、歸併排序

歸併排序是一種高效的排序算法,它使用分治法(divide and conquer)策略,將原數組拆分成兩個子數組,對每個子數組進行排序,然後將排好序的子數組進行合併。

因為歸併排序使用了分治法的思想,遞歸調用實現分治,適用於大規模數據排序,時間複雜度為O(nlogn),其穩定性也保證了歸併排序的優勢。


    def merge(lst1, lst2):
        i, j = 0, 0
        sorted_lst = []

        while i < len(lst1) and j < len(lst2):
            if lst1[i] <= lst2[j]:
                sorted_lst.append(lst1[i])
                i += 1
            else:
                sorted_lst.append(lst2[j])
                j += 1

        sorted_lst += lst1[i:]
        sorted_lst += lst2[j:]

        return sorted_lst

    def merge_sort(lst):
        if len(lst) <= 1:
            return lst

        middle = len(lst) // 2
        left_lst = lst[:middle]
        right_lst = lst[middle:]

        left_lst = merge_sort(left_lst)
        right_lst = merge_sort(right_lst)

        return merge(left_lst, right_lst)

    lst = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
    sorted_lst = merge_sort(lst)

    print(sorted_lst) # [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]

四、快速排序

快速排序也是一種高效的排序算法,它使用分治法,選取一個基準元素,將數組拆分成兩個子數組,然後對每個子數組進行排序,最後將排好序的子數組進行合併,即可得到一個有序數組。

由於快速排序的基本操作是比較和交換,該算法運行速度非常快,時間複雜度也為O(nlogn)。快速排序常被認為是目前最快的排序算法之一。


    def partition(lst, low, high):
        i = low - 1
        pivot = lst[high]

        for j in range(low, high):
            if lst[j] < pivot:
                i += 1
                lst[i], lst[j] = lst[j], lst[i]

        lst[i+1], lst[high] = lst[high], lst[i+1]

        return i + 1

    def quick_sort(lst, low, high):
        if low < high:
            pi = partition(lst, low, high)

            quick_sort(lst, low, pi - 1)
            quick_sort(lst, pi + 1, high)

            return lst

    lst = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
    sorted_lst = quick_sort(lst, 0, len(lst)-1)

    print(sorted_lst) # [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]

五、“TimSort算法”

“TimSort算法”是一種基於歸併排序和插入排序的混合排序算法。在Python中,使用的就是這種排序算法。它最初由Tim Peters於2002年提出,具有較強的適用性,並被廣泛應用於各種編程語言和庫中。

“TimSort算法”實現了一種可變大小的算法,該算法可以根據排序數據的性質調整,並且適用於多個排序任務。其時間複雜度為O(nlogn),具有良好的穩定性和適用性,是目前最為流行的排序算法之一。

六、總結

本文介紹了Python中常用的幾種排序算法以及相應的優化方法。在實際編程中,為了提高代碼運行效率,我們可以根據具體情況選擇合適的算法和庫進行排序操作。一般來說,內置的排序函數和NumPy庫的sort函數可以滿足我們的絕大部分需求,而歸併排序和快速排序在某些特定場景下表現優異。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/280370.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-21 13:03
下一篇 2024-12-21 13:03

相關推薦

  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • 蝴蝶優化算法Python版

    蝴蝶優化算法是一種基於仿生學的優化算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化算法Python版…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智能、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29

發表回復

登錄後才能評論