Python小點dian兒:sort疑問大全

遇到了就刨根問題,補補python基礎吧。

數據會清理,特徵會派生,模型會跑,參數能調,但始終還是有漏洞,或者術語不可名狀。

python 去重,並保持列表原來順序

list_a = ['cc', 'bbb', 'dda','bbbb', 'cc', 'sss',  'fase']
list_new = list(set(list_a))
list_new.sort(key = list_a.index)

>>> list_a = ['cc', 'bbb', 'dda','bbbb', 'cc', 'sss',  'fase']
>>> list_new = list(set(list_a))
>>> list_new
['cc', 'dda', 'bbbb', 'sss', 'bbb', 'fase']
>>> list_new.sort(key = list_a.index)
>>> list_new
['cc', 'bbb', 'dda', 'bbbb', 'sss', 'fase']

 key的作用是指定待排序list(此處即list_a)中的元素中用來作爲排序依據的屬性

sort還有其他的參數:(取自百度問答)

li.sort(cmp=None, key=None, reverse=False)
uMinNum = li[0]
li.sort(cmp=None, key=None, reverse=True)
uMaxNum = li[0]
-----------------------------------------
li是一個列表,用列表存儲這些數據, 然後用列表的排序方法sort()。
li.sort(cmp=None, key=None, reverse=False)也可以寫成li.sort(), 因爲sort()函數的原形就是這樣。默認的爲是升序排序。
li.sort(cmp=None, key=None, reverse=True)修改sort()的reverse變量, 讓sort()進行降序排序。
li[0] 是取排好序後的第一個元素

>>> c.sort(key=lambda x:x[0]) #依照列表第0個元素進行排序
>>> c 
[(0, 9), (1,8), (2, 7), (3, 6), (4, 5), (5, 4), (6, 3), (7, 2), (8, 1), (9, 0)] 

>>> c.sort(key=lambda x:x[1]) 
>>> c 
[(9, 0), (8, 1), (7, 2), (6, 3), (5, 4), (4, 5), (3, 6), (2, 7), (1,8), (0, 9)]

上例中的key爲匿名方法,分別以c[i][0], 和 c[i][1] 作爲排序依據,所以有這個結果。cmp的作用是指定比較的標準,如升序,逆序等等

爲什麼x.sort() 是None

>>> list_new
['cc', 'bbb', 'dda', 'bbbb', 'sss', 'fase']
>>> one =list_new.sort(key = list_a.index)
>>> print(one)
None

這裏會返回None的原因 可參考x.sort() == sorted(y) 爲什麼是False,原因是

x.sort()

sort是列表的一個方法,該方法直接修改原x列表,返回None。

所以,比較的對象應該是sort後的 x 與 sorted(y)。

x.sort()

== sorted(y)

這樣就返回True了。a.sort是對a進行排序,返回None,sorted(a)返回一個排好序的副本,a不變。

同理,可反觀我師弟孫凱提到的問題

python中sort和sorted的問題

這兩種方法的可參考上面爲什麼x.sort() 是None

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章