py 自定義物件的排序比較,等值判斷及hash求值

2021-07-29 15:08:24 字數 2549 閱讀 3049

直接比較會報錯.

>>> 2 < '2'

traceback (most recent call last):

file "", line 1, in typeerror: unorderable types: int() < str()

例子

class

student

:def

__init__

(self,score:

int)

: self.score=score

# 寫了'<'的判別標準, '>' 的自動就有了, 不需要再寫`__gt__()`

def__lt__

(self, other)

:return self.score < other.score

# 寫了 == 的判別標準

def__eq__

(self, other)

:return self.score == other.score

def__str__

(self)

:return

"score {}"

.format

(self.score)

a= student(1)

b= student(2)

c= student(1)

my_list=

[c,b,a]

print

("before sort. "

+','

.join(

map(

str,my_list)))

my_list.sort(

)print

("after sort. "

+','

.join(

map(

str,my_list)))

print

(a>b)

"""before sort. score 1,score 2,score 1

after sort. score 1,score 1,score 2

false

"""

sorted(iterable, cmp=none, key=none, reverse=false)它不會改變實參, 會返回新的有序集合.

預設公升序排序. 例子

#coding=utf-8

class student:

def __init__(self, num, score):

self.num=num

self.score=score

@staticmethod

def showlist(list):

for x in list:

print('num:'+str(x.num) + '\tscore:'+str(x.score))

print('---')

arr=[student(1001,100),student(1002,90)]

#學號公升序

student.showlist(sorted(arr,key=lambda x :x.num))

#成績公升序

student.showlist(sorted(arr,key=lambda x :x.score))

#成績公升序

student.showlist(sorted(arr,cmp=lambda x,y :x.score-y.score))

還可以按照dict的value進行排序.

import operator

dict={}

dict[1]=2

dict[2]=4

dict[3]=0

dict_sorted=sorted(dict.iteritems(),key=operator.itemgetter(1))

# 上下兩種寫法一樣

dict_sorted=sorted(dict.iteritems(),key=lambda x:x[1])

print dict

print dict_sorted[0].__class__

print dict_sorted.__class__

# dict_sorted 型別是list"""

"""

list.sort(cmp=none, key=none, reverse=false), 變異演算法, 沒有返回值, 會改變自身元素順序.

覆寫__eq__(self,other)方法即可.

複寫__hash__()方法.

一般來講, 覆寫__hash__()的時候, 都要同時覆寫__eq__(self,other)方法.

python-sorting-objects-of-user-defined-class

s.o.f ******-a-python-user-defined-class-sortable-hashable

自定義物件陣列的排序

定義乙個 student 類,擁有兩個屬性,即姓名 string name 和年齡 int age 如果現在我宣告了乙個 student 類的物件陣列,那麼,如何利用 arrays.sort 方法對這個自定義物件陣列加以排序。其實,很簡單,只需要做到以下3點即可 首先,讓需要進行排序的自定義類,如s...

list sort 給自定義物件排序

自定義物件user 給list集合按年齡大小排序。public class user public int age public string name 這裡我們需要乙個自定義的比較器 public static int comparebyage user x,user y 從大到小排序器 retu...

自定義List物件集合排序

1.定義實體類 public class commodity public commodity string type,string name,double price,string shopname,int sales 此處省略類屬性的get set方法 public string tostrin...