数据结构:链表(python版) 续:增加比较函数
题目:
基于元素相等操作“==”定义一个单链表的相等比较函数。另请基于字典序的概念,为链表定义大于,小于,大于等于,小于等于的判断
1 class LList: 2 3 """ 4 省略已实现部分 5 """ 6 7 #根据索引获得该位置的元素 8 def __getitem__(self, key): 9 if not isinstance(key, int): 10 raise TypeError 11 if 0<=key<len(self): 12 p = self._head 13 num = -1 14 while p: 15 num += 1 16 if key == num: 17 return p.elem 18 else: 19 p = p.next 20 else: 21 raise IndexError 22 23 #判断两个列表是否相等 == 24 def __eq__(self, other): 25 #两个都为空列表 则相等 26 if len(self)==0 and len(other)==0: 27 return True 28 #两个列表元素个数相等 当每个元素都相等的情况下 两个列表相等 29 elif len(self) == len(other): 30 for i in range(len(self)): 31 if self[i] == other[i]: 32 pass 33 else: 34 return False 35 #全部遍历完后则两个列表相等 36 return True 37 #两个列表元素个数不相等 返回Fasle 38 else: 39 return False 40 #判断两个列表是否不相等 != 41 def __ne__(self, other): 42 if self.__eq__(other): 43 return False 44 else: 45 return True 46 # > 47 def __gt__(self, other): 48 l1 = len(self) 49 l2 = len(other) 50 if not isinstance(other, LList): 51 raise TypeError 52 # 1.len(self) = len(other) 53 if l1 == l2: 54 for i in range(l1): 55 if self[i] == other[i]: 56 continue 57 elif self[i] < other[i]: 58 return False 59 else: 60 return True 61 #遍历完都相等的话说明两个列表相等 所以返回False 62 return False 63 # 2.len(self) > len(other) 64 if l1 > l2: 65 for i in range(l2): 66 if self[i] == other[i]: 67 continue 68 elif self[i] < other[i]: 69 return False 70 else: 71 return True 72 #遍历完后前面的元素全部相等 则列表个数多的一方大 73 #if self[l2-1] == other[l2-1]: 74 return True 75 # 3.len(self) < len(other) 76 if l1 < l2: 77 for i in range(l1): 78 if self[i] == other[i]: 79 continue 80 elif self[i] < other[i]: 81 return False 82 else: 83 return True 84 #遍历完后前面的元素全部相等 则列表个数多的一方大 85 #if self[l2-1] == other[l2-1]: 86 return False 87 # < 88 def __lt__(self, other): 89 #列表相等情况下>会返回False,则<这里判断会返回True,有错误.所以要考虑在==的情况下也为False 90 if self.__gt__(other) or self.__eq__(other): 91 return False 92 else: 93 return True 94 # >= 95 def __ge__(self, other): 96 """ 97 if self.__eq__(other) or self.__gt__(other): 98 return True 99 else: 100 return False 101 """ 102 #大于等于和小于是完全相反的,所以可以依靠小于实现 103 if self.__lt__(other): 104 return False 105 else: 106 return True 107 # <= 108 def __le__(self, other): 109 """ 110 if self.__eq__(other) or self.__lt__(other): 111 return True 112 else: 113 return False 114 """ 115 ##小于等于和大于是完全相反的,所以可以依靠大于实现 116 if self.__gt__(other): 117 return False 118 else: 119 return True