python 對列表實現山型排序

2021-10-12 16:35:31 字數 2356 閱讀 4028

首先什麼是山型排序,就是把乙個列表做中間數值大,兩邊數值小的樣子,假如這個序列如下:

5, 1, 6, 2, 7, 14, 12, 19, 16, 30, 17, 27, 22, 26, 28, 31, 25

如何排序呢,不多說,直接上**,封裝乙個排序檔案,定義好排序的類:

class bubble:

#類標註

'''氣泡排序類

'''def __init__

(self)

:'''

初始化函式

'''pass

def sort_from_big

(self, lst)

: #函式標註

'''倒序排列

'''ret = self.

sort_from_little

(lst)

#正序排列後的倒序輸出

return ret[::

-1] @classmethod

def sort_from_little

(self, lst)

:'''

類函式正序排列

'''#引數檢測,入參檢測

if not isinstance

(lst,

(list,tuple)):

raise typeerror

('引數必須為列表或元祖')if

len(lst)

<2:

raise valueerror

('列表中資料數量至少有2個'

)for data in lst:

if not isinstance

(data,

int)

: raise valueerror

("資料必須為int型別"

) #防止傳入tuple,無法做交換操作

tmp =

list

(lst)

#排序for i in range

(len

(tmp)-1

):for j in range

(i,len

(tmp)-1

):if tmp[j]

> tmp[j+1]

: tmp[j]

,tmp[j+1]

= tmp[j+1]

,tmp[j]#交換

return tmp

呼叫檔案**如下:

from bubble import bubble

# 檢視函式標註

# help(bubble)

# help(bubble.sort_from_little)

# help(bubble.sort_from_big)

#建立元祖(測試傳入元祖會不會報錯)

num_list =(5

,1,6

,2,7

,14,12

,19,16

,30,17

,27,22

,26,28

,31,25

)print

('原始資料:'

, num_list)

#類函式可直接使用

num_from_little = bubble.

sort_from_little

(num_list)

print

('從小到大排列(類函式):'

, num_from_little)

#例項化使用

bbb =

bubble()

num_from_big = bbb.

sort_from_big

(num_list)

print

('從大到小排列(例項化):'

, num_from_big)

#切片,從0開始,每2個數取乙個

mountain = num_from_little[::

2]print

(mountain)

#切片,先從1開始,每2個數取乙個;然後倒序;然後附加在mountian後邊

mountain.

extend

(num_from_little[1:

:2][

::-1

])print

('山形輸出:'

, mountain)

總結需要注意的地方

1.入參檢測,不清楚傳入的是touple還是list,所以要檢查,防止不能進行排序而出錯

2.切片操作很巧妙,列表後邊加[::-1] 直接就是對列表倒敘排列

3.為保證山形排序,排除的山高低圓滑,使用切片操作將排序好的列表按照2個取乙個方取出來,再將後部分倒敘配接,這個方法很巧妙

Python對列表排序 氣泡排序

直接用列表自帶函式排序,sort 方法預設公升序,將引數reverse改為true,改為降序 list 7,4,3,67,34,1,8 list sort print list 1,3,4,7,8,34,67 list sort reverse true print list 67,34,8,7,4...

Python如何實現列表排序

python 列表排序 題目 班級同學的成績存放在列表中,list 523,435,712,566,613,675,620,689,643 請將列表內的成績從小到大進行排序。1 氣泡排序 基本思想 相鄰的兩個元素進行比較,然後把較大的元素放到後面 正向排序 在一輪比較完後最大的元素就放在了最後乙個位...

python實現列表的排序

群裡有同行遇到這樣乙個面試題 有乙個整數構成的列表,需要給這個列表進行從小到大存入到另乙個列表中。本身排序可以用python的內建函式sort和sorted,但題目的要求是手動實現。看起來很簡單,實現的發現並不容易,花了半個小時才除錯好。解題思路 1.將列表中的第1個元素放入新列表,然後將元素的索引...