————————Python練習題三———————
(排序之前,先尋找一下序列的最大值和最小值)
一.尋找序列最大值和最小值
1.使用內置函式max()和min()
①max()和min()都是Python提供的支持序列的內置函式
②max()和min()都針對可迭代物件(關于可迭代物件見注釋③)
演示:
#直接使用
>>> max(1,2,3,4,5)
5
>>> min(1,2,3,4,5)
1
#串列和元祖的元素都是數字的情況
>>> L = [1,2,3,4,5]#串列
>>> print(max(L))
5
>>> print(min(L))
1
>>> T = (1,2,3,4,5)#元祖
>>>> print(max(T))
5
>>> print(min(T))
1
#串列和元祖的元素為字串的情況(可以先去看下面的注釋 ①)
>>> L = ["Ann","Bob","Dawn","Alice","Cherry"]#串列(元祖操作相同,不再贅述)
>>> print(max(L))
Dawn
>>> print(min(L))
Alice
#對于字串
>>> s = "abcdefg"
>>> print(max(s))
g
>>> print(min(s))
a
#對于字典(可以先去看一下注釋 ②)
>>> dict = {"Ann":1,"Bob":2,"Dawn":3,"Alice":4,"Cherry":5}
>>> print(max(dict))#默認為key
Dawn
>>> print(min(dict))
Alice
>>> dict = {"Ann":1,"Bob":2,"Dawn":3,"Alice":4,"Cherry":5}
>>> print(max(dict.keys()))
Dawn
>>> print(max(dict.values()))
5
>>> dict = {"Ann":1,"Bob":2,"Dawn":3,"Alice":4,"Cherry":5}
>>> min_dict1 = min(zip(dict.values(), dict.keys()))#使用zip()函式調換鍵值位置
>>> print(min_dict1)
(1, 'Ann')
注:
①字串比較大小,根據ASCII值,從首字母開始比對,如果相同再從第二個字母比對,以此類推下去
②對于字典而言,默認比較key,如果想要獲取value的最值,可以打點呼叫values(),當然還可以用zip()函式交換鍵值位置,但是這種方法輸出的是鍵(原來的值)和值(原來的鍵)
③關于可迭代物件(Iterable):可迭代物件的意思是指存盤了元素的一個容器物件,并不是指某種具體的資料型別,常見的可迭代物件:
*序列,包括字串,串列,元組,集合,字典在內;
*迭代器物件(Iterator);
*生成器函式(generator);
*檔案物件,
2.自定義最值函式
【例題1】撰寫函式,查找序列元素的最大值和最小值,從鍵盤得到一個序列,回傳并列印輸出一個元組,其中元組第一個元素為序列最大值,第二個元素為序列最小值,
解題代碼:
def maxmin(l): #定義一個最大值最小值函式
max = min = l[0] #初始化最大值和最小值為序列第一個元素
for i in l[1:]:#利用for回圈遍歷序列元素進行比較交換
if i > max:
max = i
elif i < min:
min = i
return (max,min) #回傳最大值和最小值
l = eval(input()) #輸入自定義的序列
l1 = maxmin(l) #呼叫自定義函式
print(l1)
二.常用排序方法(準確來講,是我能力范圍之內的排序方法)
1.插入排序
①基本思想:在一個已經排好序的記錄子集的基礎上,找到一個適合的位置,將下一個待排序的記錄有序地插入已經排好序的記錄子集中,直到將所有待排記錄全部插入為止,(簡單來講,就像是打撲克牌時的抓牌程序,每摸一張牌,插入合適位置,直到抓完牌為止)
②實作代碼:
def InsertionSort(a):
for i in range(len(a)):
preIndex = i-1
current = a[i]
while preIndex >= 0 and a[preIndex] > current:
a[preIndex+1] = a[preIndex]
preIndex-=1
a[preIndex+1] = current
return a
2.選擇排序
①基本思想:(以升序為例)依次選出待排序記錄中的最小值,與前面的合適位置元素交換,直到有序為止
②實作代碼:
def SelectionSort(a):
for i in range(len(a) - 1):
minIndex = i
for j in range(i + 1, len(a)):
if a[j] < a[minIndex]:
minIndex = j
if i != minIndex:
a[i], a[minIndex] = a[minIndex], a[i]
return a
3.冒泡排序
①基本思想:兩兩比較待排序記錄的關鍵字,發現兩個記錄逆序時進行交換,直到沒有反序的記錄為止
②實作代碼:
def BubbleSort(a):
for i in range(1, len(a)):
for j in range(0, len(a)-i):
if a[j] > a[j+1]:
a[j], a[j + 1] = a[j + 1], a[j]
return a
今天的總結就到這里啦,明天周日,給自己放個假(最近好忙),所以下周一再繼續啦!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/275160.html
標籤:python
