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

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