欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python要如何實(shí)現(xiàn)列表排序的幾種方法

 更新時(shí)間:2020年02月21日 15:15:07   作者:楊小平#  
這篇文章主要介紹了Python要如何實(shí)現(xiàn)列表排序的幾種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

排序,是許多編程語(yǔ)言中經(jīng)常出現(xiàn)的問(wèn)題。同樣的,在Python中,如何是實(shí)現(xiàn)排序呢?(以下排序都是基于列表來(lái)實(shí)現(xiàn))

一、使用Python內(nèi)置函數(shù)進(jìn)行排序

Python中擁有內(nèi)置函數(shù)實(shí)現(xiàn)排序,可以直接調(diào)用它們實(shí)現(xiàn)排序功能

Python 列表有一個(gè)內(nèi)置的 list.sort() 方法可以直接修改列表。還有一個(gè) sorted() 內(nèi)置函數(shù),它會(huì)從一個(gè)可迭代對(duì)象構(gòu)建一個(gè)新的排序列表。

1.sort()函數(shù):

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

其中參數(shù)的含義是:

cmp -- 可選參數(shù), 如果指定了該參數(shù)會(huì)使用該參數(shù)的方法進(jìn)行排序。

key -- 主要是用來(lái)進(jìn)行比較的元素,只有一個(gè)參數(shù),具體的函數(shù)的參數(shù)就是取自于可迭代對(duì)象中,指定可迭代對(duì)象中的一個(gè)元素來(lái)進(jìn)行排序。

reverse -- 排序規(guī)則,reverse = True 降序, reverse = False 升序(默認(rèn))。

默認(rèn)輸入列表就可以排序,例如:

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 -- 可迭代對(duì)象。

cmp -- 比較的函數(shù),這個(gè)具有兩個(gè)參數(shù),參數(shù)的值都是從可迭代對(duì)象中取出,此函數(shù)必須遵守的規(guī)則為,大于則返回1,小于則返回-1,等于則返回0。

key -- 主要是用來(lái)進(jìn)行比較的元素,只有一個(gè)參數(shù),具體的函數(shù)的參數(shù)就是取自于可迭代對(duì)象中,指定可迭代對(duì)象中的一個(gè)元素來(lái)進(jìn)行排序。

reverse -- 排序規(guī)則,reverse = True 降序 , reverse = False 升序(默認(rèn))。

同樣的,使用sorted()函數(shù)可以對(duì)列表進(jìn)行排序,例如:

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

sort()和sorted()雖然相似,都可以實(shí)現(xiàn)排序功能,但是它們有很大的不同:

sort ()與sorted()區(qū)別:

sort() 是應(yīng)用在 list 上的方法,sorted() 可以對(duì)所有可迭代的對(duì)象進(jìn)行排序操作。

list 的 sort() 方法返回的是對(duì)已經(jīng)存在的列表進(jìn)行操作,無(wú)返回值,而內(nèi)建函數(shù) sorted() 方法返回的是一個(gè)新的 list,而不是在原來(lái)的基礎(chǔ)上進(jìn)行的操作。

列表的翻轉(zhuǎn)(reverse)、升序(sort)、降序(sorted),按長(zhǎng)度排列的用法 

list4 = [10,10,50,20,30,60,51,20,10,10]
print(list4)
list4.reverse()               #翻轉(zhuǎn)
print(list4)
 
list4.sort()
print(list4)            #升序排列,直接對(duì)表進(jìn)行操作
 
list4.sort(reverse=True)
print(list4)            #降序排列
 
list41 = [10,10,50,20,30,60,51,20,10,10]
print(sorted(list41))        #升序排列,生成一個(gè)新表
print(list41)
 
print(sorted(list41,reverse=True)) #降序排列,從之前的列表中挑選出元素組成新的表
print(list41) 
 
list43 = ["fddg","gfdggfg","f"]  #按照長(zhǎng)度進(jìn)行排序,生成新的列表
print(sorted(list43,key=len))

二、使用常用的排序算法進(jìn)行排序

同其他高級(jí)函數(shù)一樣,Python也可以使用算法,利用一般語(yǔ)句進(jìn)行排序。

1.冒泡排序

  冒泡排序是最常見(jiàn)到的排序算法,也是很基礎(chǔ)的一種排序算法。它的實(shí)現(xiàn)思想是:相鄰的兩個(gè)元素進(jìn)行比較,然后把較大的元素放到后面(正向排序),在一輪比較完后最大的元素就放在了最后一個(gè)位置,像魚兒在水中吐的氣泡在上升的過(guò)程中不斷變大,

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.選擇排序

  選擇排序的思路是:第一輪的時(shí)候,所有的元素都和第一個(gè)元素進(jìn)行比較,如果比第一個(gè)元素大,就和第一個(gè)元素進(jìn)行交換,在這輪比較完后,就找到了最小的元素;第二輪的時(shí)候所有的元素都和第二個(gè)元素進(jìn)行比較找出第二個(gè)位置的元素,以此類推。

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.插入排序

  插入排序的思想是將一個(gè)數(shù)據(jù)插入到已經(jīng)排好序的有序數(shù)據(jù)中,從而得到一個(gè)新的、個(gè)數(shù)加一的有序數(shù)據(jù),算法適用于少量數(shù)據(jù)的排序,時(shí)間復(fù)雜度為O(n^2)。 是穩(wěn)定的排序方法。插入算法把要排序的數(shù)組分成兩部分:第一部分包含了這個(gè)數(shù)組的所有元素,但將最后一個(gè)元素除外(讓數(shù)組多一個(gè)空間才有插入的位置), 而第二部分就只包含這一個(gè)元素(即待插入元素)。在第一部分排序完成后,再將這個(gè)最后元素插入到已排好序的第一部分中

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.快速排序

  快速排序的思想是:通過(guò)一趟排序?qū)⒁判虻臄?shù)據(jù)分割成獨(dú)立的兩部分,其中一部分的所有數(shù)據(jù)都比另外一部分的所有數(shù)據(jù)都要小, 然后再按此方法對(duì)這兩部分?jǐn)?shù)據(jù)分別進(jìn)行快速排序,整個(gè)排序過(guò)程可以遞歸進(jìn)行,以此達(dá)到整個(gè)數(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.希爾排序

  希爾排序是插入排序的一種。也稱縮小增量排序,是直接插入排序算法的一種更高效的改進(jìn)版本。希爾排序是非穩(wěn)定排序算法。 該方法因DL.Shell于1959年提出而得名。 希爾排序是把記錄按下標(biāo)的一定增量分組,對(duì)每組使用直接插入排序算法排序;隨著增量逐漸減少, 每組包含的關(guān)鍵詞越來(lái)越多,當(dāng)增量減至1時(shí),整個(gè)文件恰被分成一組,算法便終止。

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

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python字典和集合講解

    Python字典和集合講解

    這篇文章主要給大家假關(guān)節(jié)的是Python字典和集合,字典是Python內(nèi)置的數(shù)據(jù)結(jié)構(gòu)之一,是一個(gè)無(wú)序的序列;而集合是python語(yǔ)言提供的內(nèi)置數(shù)據(jù)結(jié)構(gòu),沒(méi)有value的字典,集合類型與其他類型最大的區(qū)別在于,它不包含重復(fù)元素。想具體了解有關(guān)python字典與集合,請(qǐng)看下面文章內(nèi)容
    2021-10-10
  • Python操作Excel數(shù)據(jù)的封裝函數(shù)分享

    Python操作Excel數(shù)據(jù)的封裝函數(shù)分享

    對(duì)比其它編程語(yǔ)言,我們都知道Python最大的優(yōu)勢(shì)是代碼簡(jiǎn)單,有豐富的第三方開源庫(kù)供開發(fā)者使用。而對(duì)于數(shù)據(jù)的讀取和存儲(chǔ),對(duì)于普通人來(lái)講,除了數(shù)據(jù)庫(kù)之外,最常見(jiàn)的就是微軟的Excel。本文為大家準(zhǔn)備了Python操作Excel數(shù)據(jù)的封裝函數(shù),希望對(duì)大家有所幫助
    2022-11-11
  • pandas 自定義列名的實(shí)現(xiàn)

    pandas 自定義列名的實(shí)現(xiàn)

    在pandas中,你可以通過(guò)多種方法自定義DataFrame的列名,下面就來(lái)介紹一下,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-12-12
  • python中的lambda表達(dá)式用法詳解

    python中的lambda表達(dá)式用法詳解

    這篇文章主要介紹了python中的lambda表達(dá)式用法,詳細(xì)分析了lambda函數(shù)的功能、定義、使用方法與相關(guān)技巧,需要的朋友可以參考下
    2016-06-06
  • python腳本實(shí)現(xiàn)數(shù)據(jù)導(dǎo)出excel格式的簡(jiǎn)單方法(推薦)

    python腳本實(shí)現(xiàn)數(shù)據(jù)導(dǎo)出excel格式的簡(jiǎn)單方法(推薦)

    下面小編就為大家?guī)?lái)一篇python腳本實(shí)現(xiàn)數(shù)據(jù)導(dǎo)出Excel格式的簡(jiǎn)單方法(推薦)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-12-12
  • 使用Django+Vue編寫一個(gè)文件上傳器

    使用Django+Vue編寫一個(gè)文件上傳器

    本教程中,我將會(huì)使用Django和Vue創(chuàng)建一個(gè)支持多文件上傳的文件上傳器,您可以在單個(gè)文件和多個(gè)文件上傳之間選擇在應(yīng)用中進(jìn)行上傳操作,文章通過(guò)代碼示例截殺的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • 用Python寫腳本,實(shí)現(xiàn)完全備份和增量備份的示例

    用Python寫腳本,實(shí)現(xiàn)完全備份和增量備份的示例

    下面小編就為大家分享一篇用Python寫腳本,實(shí)現(xiàn)完全備份和增量備份的示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • 解決python 讀取excel時(shí) 日期變成數(shù)字并加.0的問(wèn)題

    解決python 讀取excel時(shí) 日期變成數(shù)字并加.0的問(wèn)題

    這篇文章主要介紹了python 讀取excel時(shí), 日期變成數(shù)字并加.0的問(wèn)題,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-10-10
  • python讀取.data文件的實(shí)現(xiàn)

    python讀取.data文件的實(shí)現(xiàn)

    本文主要介紹了python讀取.data文件的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • Python基于sftp及rsa密匙實(shí)現(xiàn)遠(yuǎn)程拷貝文件的方法

    Python基于sftp及rsa密匙實(shí)現(xiàn)遠(yuǎn)程拷貝文件的方法

    這篇文章主要介紹了Python基于sftp及rsa密匙實(shí)現(xiàn)遠(yuǎn)程拷貝文件的方法,結(jié)合實(shí)例形式分析了基于RSA秘鑰遠(yuǎn)程登陸及文件操作的相關(guān)技巧,需要的朋友可以參考下
    2016-09-09

最新評(píng)論