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 的sorted用法,按照特定的序列排序。如下文,請知道的大大詳細解釋下key代表的什麼。

sorted(list,key=dic_be_ranked.__getitem__)

㈢ python列表排序方法

列表的sort方法就是用來進行排序的。

主要就是兩個參數,key,reverse


先說reverse,這個很簡單,就是指出版是否進行倒序排序:權一般情況下,1排在2的前面,而倒序則相反。


key參數:一般它是一個函數,它接受列表中每一個元素,返回一個可用用於比較的值。

s=[1,2,3,4,5]

s.sort(key=lambda _: _**2%7)

print(s)

輸出的是:[1, 3, 4, 2, 5]

如果看不懂lambda表達式,可以看這一段等價的寫法:

def myfn(x):

....return (x * x) % 7


s=[1,2,3,4,5]

s.sort(key=myfn)

print(s)

輸出的結果是一樣的。

key使用的函數可以是自定義函數也可以pytho內置的函數,或者是某個類或者實例的方法,只要它能接受一個參數,返回一個可比較的值即可。比如這樣:

s=[[1,2,4],[3,3,5],[1,1,1],[5,7,9]]

s.sort(key=max) # 直接使用max函數作為排序依據

print(s)

[[1, 1, 1], [1, 2, 4], [3, 3, 5], [5, 7, 9]]


㈣ 在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排序問題

s = [9, 2, -4, 7, -1, 0, 5, -2, -5]
def sort_abs(s):
s2 = []
for i in s:
s2.append(abs(i))
s2.sort()
for j in range(len(s2)):
try:
if s2[j] == s2[j + 1]:
s2[j] = -s2[j]
except:
break
return s2
print(s)
print(sort_abs(s))

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

自定義排序用key關鍵字
>>> a=['abc','abcd','ab']
>>> a.sort(key=len) #使用len函數返回的大小排序
>>> a
['ab', 'abc', 'abcd']

key和reverse是有的,試一下就知道了

㈦ Python學習小技巧之列表項的排序

Python學習小技巧之列表項的排序
本文介紹的是關於Python列表項排序的相關內容,分享出來供大家參考學習,下面來看看詳細的介紹:

典型代碼1:
data_list = [6, 9, 1, 3, 0, 10, 100, -100]
data_list.sort()
print(data_list)

輸出1:
[-100, 0, 1, 3, 6, 9, 10, 100]

典型代碼2:

data_list = [6, 9, 1, 3, 0, 10, 100, -100]
data_list_ = sorted(data_list)
print(data_list)
print(data_list_)

輸出2:
[6, 9, 1, 3, 0, 10, 100, -100]
[-100, 0, 1, 3, 6, 9, 10, 100]

應用場景

需要對列表中的項進行排序時使用。其中典型代碼1是使用的列表自身的一個排序方法sort,這個方法自動按照升序排序,並且是原地排序,被排序的列表本身會被修改;典型代碼2是調用的內置函數sort,會產生一個新的經過排序後的列表對象,原列表不受影響。這兩種方式接受的參數幾乎是一樣的,他們都接受一個key參數,這個參數用來指定用對象的哪一部分為排序的依據:
data_list = [(0, 100), (77, 34), (55, 97)]
data_list.sort(key=lambda x: x[1]) # 我們想要基於列表項的第二個數進行排序
print(data_list)

>>> [(77, 34), (55, 97), (0, 100)]

另外一個經常使用的參數是reverse,用來指定是否按照倒序排序,默認為False:
data_list = [(0, 100), (77, 34), (55, 97)]
data_list.sort(key=lambda x: x[1], reverse=True) # 我們想要基於列表項的第二個數進行排序,並倒序
print(data_list)
>>> [(0, 100), (55, 97), (77, 34)]

帶來的好處

1. 內置的排序方法,執行效率高,表達能力強,使代碼更加緊湊,已讀

2. 靈活的參數,用於指定排序的基準,比在類似於Java的語言中需要寫一個comparator要方便很多

其它說明

1. sorted內置函數比列表的sort方法要適用范圍更廣泛,它可以對除列表之外的可迭代數據結構進行排序;

2. list內置的sort方法,屬於原地排序,理論上能夠節省內存的消耗;

總結

好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助

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

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

㈨ python對列表裡的元素進行排序

l=['e','d','c','b','a']
l.sort()
print(l)
e=list(enumerate(l))
print(e)

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

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

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

下面講解一下:

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

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

有不懂的可以問我哦~望點贊!