Pthon 十一 sorted函式

2021-09-24 02:09:21 字數 4459 閱讀 6970

需求1:快速生成驗證碼(內推碼)

import random

# 了解該模組的方法!

import string

# 數字和字母(大小寫)-->構成列表(字串)--->擷取若干數字

code_str = string.ascii_letters + string.digits

# code_str1 = string.ascii_lowercase

# code_str2 = string.ascii_uppercase

# 預設引數

def gen_code(len=4):

# code = ''

# for i in range(len):

# new_s = random.choice(code_str)

# code += new_s

## return code

# join() 方法用於將序列中的元素以指定的字元連線生成乙個新的字串

return ''.join(random.sample(code_str, len))

# 產生若干個驗證碼-->列表生成式!

print([gen_code() for i in range(10)])

二、高階函式sorted函式

(1)sort排序回顧

list1 = [1, 6, 5, 8, 3]

tulpe1 = (1, 6, 5, 8, 3)

# 強調:只有list列表有此方法(元組沒有此方法),是原址排序!!!

list1.sort()

print(list1)

(2)sorted高階排序

# 注意:辯證sort和sorted的區別!

list1 = [1, 5, 3, 7, 10, 9, 18]

list2 = sorted(list1)

print(list1)

print('-----------------')

print(list2)

print(list1 is list2) false

# 說明:sorted開闢了乙個新的位址空間--->對原來資料的拷貝,新的位址儲存!

2.1)預設排序

說明:排序的物件是可迭代的物件即可,相比sort更寬容!

字典排序:缺省會按照dict的key值進行排序,最後返回的結果是乙個對key值排序好的list!

排序的控制方式:基於key函式(可以做文章)、基於cmp函式(了解)、基於reverse函式(預設是false,降序排序)!

##########key函式的說明###########

(1)內建函式進行排序

從python2.4開始,list.sort()和sorted()函式增加了key引數來指定乙個函式

特點:此函式將在每個元素比較前被呼叫,key引數的值為乙個函式,此函式只有乙個引數且返回乙個值用來進行比較

通俗的講:排序並不由元素而決定,而是根據key指定呼叫函式的結果決定!

練習1

# 需求1:正負數絕對值排序!

list4=[1,-5,3,-10,9,8,-12,6,13]

list5= sorted(list4,key=abs) #python內建的abs函式

print(list5)

# [1, 3, -5, 6, 8, 9, -10, -12, 13]

練習2

# 需求:字串的比較

# 說明:ascii-->大寫《小寫

list6=['dfs','fds','tda','eds']

print(list6)

# 預設以ascii比較--->大寫《小寫(所以大寫在前,小寫在後)

print(sorted(list6))

# 需求:轉換為小寫後進行比較

print(sorted(list6,key=str.lower))

# 需求:轉化為大寫後進行比較

print(sorted(list6,key=str.upper))

# 需求:說明的是-->recersed是將排序後的結果進行反轉!

print(sorted(list6,key=str.upper,reversed=true))

(2)自定義函式進行排序

需求1

"""

1.假設我們用一組tuple表示學生名字和成績,l =[('bob', 75), ('adam', 92), ('bart',66),('lisa', 88)],

1-->按名字進行排序(不歧視)

2-->按成績進行排序

"""l =[('bob', 75), ('adam', 92), ('bart', 66),('lisa', 88)]

print(sorted(l,key=lambda x:x[0]))

# 按照成績進行排序

print(sorted(l,key=lambda x:x[1]))

需求2

my_dict = 

result = sorted(my_dict)

print result

#預設對dict排序,不指定key引數,會預設對dict的key值進行比較排序!

#result輸出: ['a', 'b', 'c']

result2 = sorted(my_dict, key=lambda x:my_dict[x])

print result2

#指定key引數,根據dict的value排序

#result2輸出:['b', 'a', 'c']

#注意:輸出的還是key!!!

需求3

"""

題目需求:

(1)給定乙個整形陣列,將陣列中所有的0移動到末尾, 非0項保持不變;

(2)在原始陣列上進行移動操作, 勿建立新的陣列;

# 輸入:

第一行是陣列長度, 後續每一行是陣列的一條記錄;40

7 0

2# 輸出:

調整後陣列的內容;72

00

"""def move_zore(item):

if item == 0:

return 2

else:

return 1

# 呼叫函式!

for i in sorted(li,key=move_zore):

print(i)

需求4:

"""

有乙個整數列表(10個元素),要求調整元素的順序:把奇數放在前面 偶數放在後面

"""# 方式1

list1=[1,2,19,18,16,14,13,17,22]

print([i for i in sorted(list1,key=lambda j:(j+1)%2)])

# 說明:相當於根據return (j+1)%2結果-->[0,1]來對映進行排序!

# 方式2 -->含義大概就是偶數是2,奇數是1!

#print(sorted(list1,key=lambda x:2 if x%2 == 0 else 1))

# if x%2 ==0:

# return 2

# else:

# return 1

需求5:

info = [

# 商品名稱 商品數量 商品**

]# 按照商品數量進行排序

def sorted_by_count(x):

return x[1]

# 按照商品**進行排序

def sorted_by_price(x):

return x[2]

# 先按照商品數量進行小-大的排序,如果商品數量一樣!!!-->掌握!!!

# 則按照商品**由小-大進行排序

def sorted_by_count_price(x):

return x[1],x[2]

print(sorted(info,key=sorted_by_count))

print(sorted(info,key=sorted_by_price))

print(sorted(info,key=sorted_by_count_price))

filter 函式 sorted 函式

coding utf 8 filter 函式是用於對乙個序列進行過濾或者篩選的操作。兩個引數 1 函式,設定過濾內容的邏輯 2 序列,list str都可以。過濾偶數和奇數功能 def filter function number 返回true或者false return number 2 1 該函...

高階函式 sorted函式

sorted 函式 格式 sorted iterable,key none,reverse false 說明 iterable 可迭代物件 key 函式是用來提供乙個值,這個值將作為排序的依據 reverse 標誌是用來設定是否降序排序 預設為false,公升序排列 示例 l 5,2,4,0,3,1...

sorted 函式用法

sorted 函式對所有可迭代的物件進行排序操作。sort 和sorted 有些差別,具體區別為 sort 應用在list,sorted 可以對所有可迭代的物件進行排序操作。list的sort方法返回的是對已經存在的列表進行操作,而sorted返回的是乙個新的list,而不是在原來的基礎上進行的操作...