如何解决实现分类列表的类
我正在尝试创建一个名为 Fruit 的类,并利用该类生成水果的排序列表并将其存储在 SortedList 中。但是,我现在面临的问题是,我应该首先根据长度对它们进行排序,如果它们具有相同的长度,则应按字母顺序进行排序。
到目前为止,这是我的代码:
class Node:
# Constructor
def __init__(self):
self.nextNode = None
class Fruit(Node):
def __init__(self,name):
self.name = name
self.nextNode = None
def __str__(self):
return f"'{self.name}'"
def __eq__(self,otherNode):
if otherNode == None:
return False
else:
return self.name == otherNode.name
def __lt__(self,otherNode):
if otherNode == None:
raise TypeError("'<' not supported between instances of 'Temp' and 'nonetype'")
while len(self.name) < len(otherNode.name):
# if len(self.name) == len(otherNode.name):
# while
# return self.name and otherNode.name
# else:
return self.name and otherNode.name
class SortedList:
def __init__(self):
self.headNode = None
self.currentNode = None
self.length = 0
def __appendToHead(self,newNode):
oldHeadNode = self.headNode
self.headNode = newNode
self.headNode.nextNode = oldHeadNode
self.length += 1
def insert(self,newNode):
self.length += 1
# If list is currently empty
if self.headNode == None:
self.headNode = newNode
return
# Check if it is going to be new head
if newNode < self.headNode:
self.__appendToHead(newNode)
return
# Check it is going to be inserted between any pair of Nodes (left,right)
leftNode = self.headNode
rightNode = self.headNode.nextNode
while rightNode != None:
if newNode < rightNode:
leftNode.nextNode = newNode
newNode.nextNode = rightNode
return
leftNode = rightNode
rightNode = rightNode.nextNode
# Once we reach here it must be added at the tail
leftNode.nextNode = newNode
def __str__(self):
# We start at the head
output =""
node= self.headNode
firstNode = True
while node != None:
if firstNode:
output = node.__str__()
firstNode = False
else:
output += (',' + node.__str__())
node= node.nextNode
return output
# Main program for fruit
l = SortedList()
# Populate a sorted list with fruitnames
fruits = ['Cherry','Apricot','lime','blueBerry','Apple','Date']
print('Before sorting')
print(fruits)
for fruit in fruits:
l.insert(Fruit(fruit))
print('\nAfter sorting')
print(l)
Before sorting
['Cherry','Date']
After sorting
'lime','Date','Cherry','blueBerry'
预期输出为:
Before sorting
['Cherry','Date']
After sorting
'Date','blueBerry'
如何解决?
解决方法
import functools
def compare(fruit1,fruit2):
if len(fruit1) < len(fruit2):
return -1
elif len(fruit1) > len(fruit2):
return 1
elif fruit1 < fruit2:
return -1
elif fruit1 > fruit2:
return 1
else:
return 0
sorted(fruitList,key=functools.cmp_to_key(compare))
这应该有效
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。