小編給大家分享一下使用Python內(nèi)置函數(shù)進行排序的示例,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
排序,是許多編程語言中經(jīng)常出現(xiàn)的問題。同樣的,在Python中,如何是實現(xiàn)排序呢?(以下排序都是基于列表來實現(xiàn))
一、使用Python內(nèi)置函數(shù)進行排序
Python中擁有內(nèi)置函數(shù)實現(xiàn)排序,可以直接調(diào)用它們實現(xiàn)排序功能
Python 列表有一個內(nèi)置的 list.sort() 方法可以直接修改列表。還有一個 sorted() 內(nèi)置函數(shù),它會從一個可迭代對象構(gòu)建一個新的排序列表。
1.sort()函數(shù):
list.sort(cmp=None, key=None, reverse=False)
其中參數(shù)的含義是:
cmp -- 可選參數(shù), 如果指定了該參數(shù)會使用該參數(shù)的方法進行排序。
key -- 主要是用來進行比較的元素,只有一個參數(shù),具體的函數(shù)的參數(shù)就是取自于可迭代對象中,指定可迭代對象中的一個元素來進行排序。
reverse -- 排序規(guī)則,reverse = True 降序, reverse = False 升序(默認)。
默認輸入列表就可以排序,例如:
list=[1,2,4,5,3] list.sort() print(list) >>>[1,2,3,4,5]
2.sorted()函數(shù):
sorted(iterable, cmp=None, key=None, reverse=False)
其中:
iterable -- 可迭代對象。
cmp -- 比較的函數(shù),這個具有兩個參數(shù),參數(shù)的值都是從可迭代對象中取出,此函數(shù)必須遵守的規(guī)則為,大于則返回1,小于則返回-1,等于則返回0。
key -- 主要是用來進行比較的元素,只有一個參數(shù),具體的函數(shù)的參數(shù)就是取自于可迭代對象中,指定可迭代對象中的一個元素來進行排序。
reverse -- 排序規(guī)則,reverse = True 降序 , reverse = False 升序(默認)。
同樣的,使用sorted()函數(shù)可以對列表進行排序,例如:
list=[1,2,4,5,3] print(sorted(list)) >>>[1,2,3,4,5]
sort()和sorted()雖然相似,都可以實現(xiàn)排序功能,但是它們有很大的不同:
sort ()與sorted()區(qū)別:
sort() 是應用在 list 上的方法,sorted() 可以對所有可迭代的對象進行排序操作。
list 的 sort() 方法返回的是對已經(jīng)存在的列表進行操作,無返回值,而內(nèi)建函數(shù) sorted() 方法返回的是一個新的 list,而不是在原來的基礎(chǔ)上進行的操作。
列表的翻轉(zhuǎn)(reverse)、升序(sort)、降序(sorted),按長度排列的用法
list4 = [10,10,50,20,30,60,51,20,10,10] print(list4) list4.reverse() #翻轉(zhuǎn) 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))
二、使用常用的排序算法進行排序
同其他高級函數(shù)一樣,Python也可以使用算法,利用一般語句進行排序。
1.冒泡排序
冒泡排序是最常見到的排序算法,也是很基礎(chǔ)的一種排序算法。它的實現(xiàn)思想是:相鄰的兩個元素進行比較,然后把較大的元素放到后面(正向排序),在一輪比較完后大的元素就放在了最后一個位置,像魚兒在水中吐的氣泡在上升的過程中不斷變大,
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.插入排序
插入排序的思想是將一個數(shù)據(jù)插入到已經(jīng)排好序的有序數(shù)據(jù)中,從而得到一個新的、個數(shù)加一的有序數(shù)據(jù),算法適用于少量數(shù)據(jù)的排序,時間復雜度為O(n^2)。 是穩(wěn)定的排序方法。插入算法把要排序的數(shù)組分成兩部分:第一部分包含了這個數(shù)組的所有元素,但將最后一個元素除外(讓數(shù)組多一個空間才有插入的位置), 而第二部分就只包含這一個元素(即待插入元素)。在第一部分排序完成后,再將這個最后元素插入到已排好序的第一部分中
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.快速排序
快速排序的思想是:通過一趟排序?qū)⒁判虻臄?shù)據(jù)分割成獨立的兩部分,其中一部分的所有數(shù)據(jù)都比另外一部分的所有數(shù)據(jù)都要小, 然后再按此方法對這兩部分數(shù)據(jù)分別進行快速排序,整個排序過程可以遞歸進行,以此達到整個數(shù)據(jù)變成有序序列。
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() #調(diào)用函數(shù) 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.希爾排序
希爾排序是插入排序的一種。也稱縮小增量排序,是直接插入排序算法的一種更高效的改進版本。希爾排序是非穩(wěn)定排序算法。 該方法因DL.Shell于1959年提出而得名。 希爾排序是把記錄按下標的一定增量分組,對每組使用直接插入排序算法排序;隨著增量逐漸減少, 每組包含的關(guān)鍵詞越來越多,當增量減至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內(nèi)置函數(shù)進行排序的示例”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計公司行業(yè)資訊頻道!
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
當前名稱:使用Python內(nèi)置函數(shù)進行排序的示例-創(chuàng)新互聯(lián)
網(wǎng)頁網(wǎng)址:http://chinadenli.net/article46/cdpdhg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、關(guān)鍵詞優(yōu)化、外貿(mào)網(wǎng)站建設(shè)、虛擬主機、網(wǎng)站收錄、網(wǎng)站導航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容