當前位置:首頁 » 編程語言 » pythonsort自定義

pythonsort自定義

發布時間: 2022-04-11 14:33:52

⑴ 關於python中sort函數賦值的問題

Python中的sort()方法用於數組排序,本文以實例形式對此加以詳細說明:
一、基本形式
列表有自己的sort方法,其對列表進行原址排序,既然是原址排序,那顯然元組不可能擁有這種方法,因為元組是不可修改的。

123

x = [4, 6, 2, 1, 7, 9]x.sort()print x # [1, 2, 4, 6, 7, 9]

如果需要一個排序好的副本,同時保持原有列表不變,怎麼實現呢

12345

x =[4, 6, 2, 1, 7, 9]y = x[ : ]y.sort()print y #[1, 2, 4, 6, 7, 9]print x #[4, 6, 2, 1, 7, 9]

注意:y = x[:] 通過分片操作將列表x的元素全部拷貝給y,如果簡單的把x賦值給y:y = x,y和x還是指向同一個列表,並沒有產生新的副本。
另一種獲取已排序的列表副本的方法是使用sorted函數:

1234

x =[4, 6, 2, 1, 7, 9]y = sorted(x)print y #[1, 2, 4, 6, 7, 9]print x #[4, 6, 2, 1, 7, 9]

sorted返回一個有序的副本,並且類型總是列表,如下:

1

print sorted('Python') #['P', 'h', 'n', 'o', 't', 'y']

二、自定義比較函數
可以定義自己的比較函數,然後通過參數傳遞給sort方法:

12345678910111213

def comp(x, y):if x < y:return 1elif x > y:return -1else:return 0 nums = [3, 2, 8 ,0 , 1]nums.sort(comp)print nums # 降序排序[8, 3, 2, 1, 0]nums.sort(cmp) # 調用內建函數cmp ,升序排序print nums # 降序排序[0, 1, 2, 3, 8]

三、可選參數
sort方法還有兩個可選參數:key和reverse

1、key在使用時必須提供一個排序過程總調用的函數:

123

x = ['mmm', 'mm', 'mm', 'm' ]x.sort(key = len)print x # ['m', 'mm', 'mm', 'mmm']

2、reverse實現降序排序,需要提供一個布爾值:

123
y = [3, 2, 8 ,0 , 1]y.sort(reverse = True)print y #[8, 3, 2, 1, 0]

⑵ python3沒有了Cmp函數,自定義的排序sort方法不是需要它作參數嗎!!怎麼辦

python3開始沒這個函數了,官方文檔是這么寫的

The cmp() function should be treated as gone, and the __cmp__() special method is no longer supported. Use __lt__() for sorting, __eq__() with __hash__(), and other rich comparisons as needed. (If you really need the cmp() functionality, you could use the expression (a > b) - (a < b) as the equivalent for cmp(a, b).)

大意就是cmp()函數已經「離開」了,如果你真的需要cmp()函數,你可以用表達式(a > b) - (a < b)代替cmp(a,b)

key和reverse還是可以用的。

如果解決了您的問題請採納!
如果未解決請繼續追問!

⑶ Python里的sort語句

Python中的sort()函數是序列的內部函數,函數原型:

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

函數作用:它是把L原地排序,也就是使用後並不是返回一個有序的序列副本,而是把當前序列變得有序。

Python中sort()參數說明:

(1) cmp參數

cmp接受一個函數,拿整形舉例,形式為:

deff(a,b):
returna-b

如果排序的元素是其他類型的,如果a邏輯小於b,函數返回負數;a邏輯等於b,函數返回0;a邏輯大於b,函數返回正數就行了。

(2) key參數

key也是接受一個函數,不同的是,這個函數只接受一個元素,形式如下:

deff(a):
returnlen(a)

key接受的函數返回值,表示此元素的權值,sort將按照權值大小進行排序

(3) reverse參數

接受False 或者True 表示是否逆序

Python中sort()函數舉例:

(1)按照元素長度排序

L=[{1:5,3:4},{1:3,6:3},{1:1,2:4,5:6},{1:9}]
deff(x):
returnlen(x)
sort(key=f)
printL
//輸出:
//[{1:9},{1:5,3:4},{1:3,6:3},{1:1,2:4,5:6}]

(2)按照每個字典元素裡面key為1的元素的值排序

L=[{1:5,3:4},{1:3,6:3},{1:1,2:4,5:6},{1:9}]
deff2(a,b):
returna[1]-b[1]
L.sort(cmp=f2)
printL
//輸出:
//[{1:1,2:4,5:6},{1:3,6:3},{1:5,3:4},{1:9}]

⑷ python,sort方法使用固定排序方法與sort(cmp)的升序排列有什麼不一樣

sort方法使用默認的元素比較函數
sort(cmp)可以自己定義元素比較函數
得到的排序結果不同。

⑸ 編寫一個自定義函數selection_sort(a,asc)(不能調用python內置的sort方法或sorted函數)

defselection_sort(a,asc):
b=[]
whilelen(a)>0:
b.append(a[0])
foriina:
if(b[-1]<iandnotasc)or(b[-1]>iandasc):
b[-1]=i
a.remove(b[-1])
returnb

⑹ python2 自定義排序規則如何排序

#分類函數
defselect(i):
return(i%3>0)and(i%2==0)
#不同分類的排序演算法
sort_funcs={
#升序
True:lambdalst:sorted(lst,reverse=False),
#降序
False:lambdalst:sorted(lst,reverse=True)
}

#混合排序
defmix_sort(arr,select,sort_funcs):
sequence={key:iter(func(vfori,vinenumerate(arr)ifselect(i)==key))forkey,funcinsort_funcs.iteritems()}
return[next(sequence[select(i)])fori,_inenumerate(arr)]

#輸出
arr=[0,1,2,3,4,5,6,7,8,9]
printmix_sort(arr,select,sort_funcs)

>>[9,7,2,6,4,5,3,1,8,0]

arr=[1,5,4,3,10,7,19]
printmix_sort(arr,select,sort_funcs)

>>[19,7,4,5,10,3,1]

在 arr =[0,1,2,3,4,5,6,7,8,9] 中,下標和值相同,比較好說明

arr 中 [2, 4, 8] 符合 「不能被 3 但可以被 2 整除」,升序為 [2, 4, 8]

arr 中 [0, 1, 3, 5, 6, 7, 9] 不符合「不能被 3 但可以被 2 整除」,降序為 [9, 7, 6, 5, 4, 1, 0]

按原先的位置組合,結果為[9,7,2,6,4,5,3,1,8,0]


不知道我理解得對不對

⑺ python怎樣用自定義函數對列表排序

您好!我寫了一個升序的方法供您參考:

請注意,要在 idle 中運行這個方法,並輸入你希望的值

下面講解一下:

方法體的第一句用於把你輸入的數字儲存在列表中,這句可以用於其他許多場合

後續的代碼就是不斷地遞歸,從而達到升序的效果

有不懂的可以問我哦~望採納!

⑻ 在Python 3 中的自定義排序怎麼辦

python3 sorted取消了對cmp的支持。
python3 幫助文檔:
sorted(iterable, key=None, reverse=False)

  • reverse是一個布爾值。如果設置為True,列表元素將被倒序排列,默認為False

  • key接受一個函數,這個函數只接受一個元素,默認為None

  • Key的作用原理

    Python2中的自定義布爾函數cmp=custom_cmp(x, y)由Python3中的key=custom_key(x)代替。

    在python3中,待比較元素x通過custom_key函數轉化為Python能比較的值custom_key(x),進而再基於返回值進行排序。

    例子1:

  • my_alphabet = ['a', 'b', 'c']def custom_key(word):

  • numbers = [] for letter in word:

  • numbers.append(my_alphabet.index(letter)) return numbers# python中的整數列表能夠比較大小# custom_key('cbaba')==[2, 1, 0, 1, 0]x=['cbaba', 'ababa', 'bbaa']

  • x.sort(key=custom_key)123456789101112

  • 例子2

  • students = [('john', 'A', 15), ('jane', 'B', 12), ('dave','B', 10)]

  • sorted(students,key=lambda x: x[2]) #按照年齡來排序12

  • 關於lambda表達式

    例子3

    默認sorted([True, False])==[False, True] (False=0 < True=1)

    一個字元串排序,排序規則:小寫<大寫<奇數<偶數

  • #元組內(e1, e2, e3)的優先順序排列為: e1 > e2 > e3sorted(s, key=lambda x: (x.isdigit(),x.isdigit() and int(x) % 2 == 0,x.isupper(),x)#input: 'asdf234GDSdsf23'#output: 'addffssDGS33224'12345

  • x.isdigit()的作用是把數字放在後邊(True),字母放在前面(False).

  • x.isdigit() and int(x) % 2 == 0的作用是保證數字中奇數在前(False),偶數在後(True)。

  • x.isupper()的作用是在前面基礎上,保證字母小寫(False)在前大寫在後(True).

  • 最後的x表示在前面基礎上,對所有類別數字或字母排序。

⑼ python sort()用法

Python中的sort()方法用於數組排序,本文以實例形式對此加以詳細說明:
一、基本形式
列表有自己的sort方法,其對列表進行原址排序,既然是原址排序,那顯然元組不可能擁有這種方法,因為元組是不可修改的。

x = [4, 6, 2, 1, 7, 9]
x.sort()
print x # [1, 2, 4, 6, 7, 9]

如果需要一個排序好的副本,同時保持原有列表不變,怎麼實現呢

x =[4, 6, 2, 1, 7, 9]
y = x[ : ]
y.sort()
print y #[1, 2, 4, 6, 7, 9]
print x #[4, 6, 2, 1, 7, 9]

注意:y = x[:] 通過分片操作將列表x的元素全部拷貝給y,如果簡單的把x賦值給y:y = x,y和x還是指向同一個列表,並沒有產生新的副本。
另一種獲取已排序的列表副本的方法是使用sorted函數:

x =[4, 6, 2, 1, 7, 9]
y = sorted(x)
print y #[1, 2, 4, 6, 7, 9]
print x #[4, 6, 2, 1, 7, 9]

sorted返回一個有序的副本,並且類型總是列表,如下:

print sorted('Python') #['P', 'h', 'n', 'o', 't', 'y']

二、自定義比較函數
可以定義自己的比較函數,然後通過參數傳遞給sort方法:

def comp(x, y):
if x < y:
return 1
elif x > y:
return -1
else:
return 0

nums = [3, 2, 8 ,0 , 1]
nums.sort(comp)
print nums # 降序排序[8, 3, 2, 1, 0]
nums.sort(cmp) # 調用內建函數cmp ,升序排序
print nums # 降序排序[0, 1, 2, 3, 8]

三、可選參數
sort方法還有兩個可選參數:key和reverse

1、key在使用時必須提供一個排序過程總調用的函數:

x = ['mmm', 'mm', 'mm', 'm' ]
x.sort(key = len)
print x # ['m', 'mm', 'mm', 'mmm']

2、reverse實現降序排序,需要提供一個布爾值:

y = [3, 2, 8 ,0 , 1]
y.sort(reverse = True)
print y #[8, 3, 2, 1, 0]

以上是雲棲社區小編為您精心准備的的內容,在雲棲社區的博客、問答、公眾號、人物、課程等欄目也有的相關內容,歡迎繼續使用右上角搜索按鈕進行搜索python , 方法 sort python sort方法、python魔術方法詳解、python實例方法詳解、list.sort 使用方法、c list.sort 使用方法,以便於您獲取更多的相關知識。

⑽ python自定義模式排序代碼解讀問題

sorted(L, key = by_name),是將L中的每個元素作用於by_name函數,比如第一步,內部是將L中的第一個元素('Bob', 75)作用於by_name,獲取到Bob,然後依次獲取其他的元素,再進行排序

熱點內容
c語言tchar 發布:2025-01-19 19:27:07 瀏覽:36
android設備搭建伺服器 發布:2025-01-19 19:20:25 瀏覽:24
phplinux安裝配置 發布:2025-01-19 19:10:23 瀏覽:233
人才招聘系統php 發布:2025-01-19 19:10:22 瀏覽:586
大學資料庫題庫 發布:2025-01-19 19:00:27 瀏覽:572
樓下大門如何設置開門密碼 發布:2025-01-19 18:59:43 瀏覽:161
dns怎麼配置最優 發布:2025-01-19 18:59:42 瀏覽:518
車輛辦理解壓要收費怎麼處理 發布:2025-01-19 18:39:46 瀏覽:951
san存儲櫃 發布:2025-01-19 18:39:35 瀏覽:64
伏魔記安卓版怎麼什麼鍵都沒有 發布:2025-01-19 18:38:54 瀏覽:902