做了一个功课,要做两个班级的陈列室:Car&节点,而Node数据包含Car类及其数据。然后我必须制作一个链接列表,应该加倍,但我认为一个简单应该也可以,包含汽车的节点。链接列表中唯一的功能是插入一个带有新Car的新节点。它应按汽车价格向上排序。
试过这个,但它一直告诉我
TypeError:'<' 'NoneType'和'NoneType'实例之间不支持
=====================================
| id | userid | item_id | rating |
=====================================
| 1 | 1 | B | 5 |
| 2 | 1 | C | 4 |
| 3 | 2 | A | 4 |
| 4 | 2 | C | 3 |
| 5 | 3 | A | 2 |
| 5 | 3 | B | 2 |
| 6 | 3 | C | 2 |
=====================================
我错过了什么,因为我认为它应该有用。
答案 0 :(得分:0)
在Node.__init__
中,您拥有使用默认值(全部为self.data = Car()
)创建Car
实例的行None
。这意味着列表中每个Car
的价格都是None
。之后,当您尝试将价格与newNode.data.price < curNode.data.price
进行比较时,您会收到例外情况,因为您无法比较None
值。
您可能需要将self.data = Car()
替换为其他内容。对于我来说,汽车数据应该来自哪个代码或者它的格式是什么,这对我来说并不明显。如果cars
序列在顶级init
重复迭代Car
1}} function已经是self.data = data
个实例的列表,那么您可能只需在Node.__init__
中执行Car
。否则,您需要执行其他操作来提取汽车数据并将其传递给Car.__init__
构造函数。您可能还想考虑删除rrr=[[(1,(3,1)),(2, (3,2)),(3, (3, 2)),(1,(4,1)),(2, (4,2))]]
df_input = []
的默认参数,因为创建没有它们的汽车似乎没有多大意义。
答案 1 :(得分:0)
我在代码中看到了一些问题,主要是关于类型一致性。您应该重新考虑这里的类结构究竟应该做什么,如何设置默认值等。另外:您是否希望将下一个节点变量作为另一个节点?
假设如下:我们有汽车。每辆车都有名称,品牌和价格。我们希望通过Node连接两辆车。我们需要能够容纳节点并允许我们插入新节点的列表。应该进行插入,使得节点层次结构以递增的价格值连接汽车。两个相邻节点共享一辆汽车。您可以将其写为:
class Car:
def __init__(self, name = " ", brand = " ", price = 0):
self.name = name
self.brand = brand
self.price = price
class Node:
def __init__(self,car1,car2):
assert type(car1) == type(car2) == Car
if car1.price > car2.price:
self.next = car1
self.current = car2
else:
self.next = car2
self.current = car1
class LinkedList:
def __init__(self,firstnode):
self.ListOfNodes = [firstnode]
def insertNode(self, car):
for i in range(0,len(self.ListOfNodes)):
curnod = self.ListOfNodes[i]
newnod = Node(car,car)
if car.price < curnod.current.price:
if i<len(self.ListOfNodes): #If its not the last node
newnod.next = curnod.current
if i>0: #If its not the first node, i.e. it has a predecessor
ListOfNodes[i-1].next = newnod.current
self.ListOfNodes.insert(i,newnod)
return
elif car.price < curnod.next.price:
newnod.current = curnod.current
curnod.current = car
self.ListOfNodes.insert(i,newnod)
return
newnod.current = self.ListOfNodes[-1].next #this is only reached if the price is higher than all before
self.ListOfNodes.append(newnod)
car1 = Car(name = "baby",brand= "honda", price = 1000)
car2 = Car(name = "yomomma",brand= "Benz", price = 10)
car3 = Car(name = "PussyWagon",brand= "Dodge", price = 100)
car4 = Car(name = "FakeTaxi",brand= "HellNah", price = 10000000)
car5 = Car(name = "LondonTaxi",brand= "ChumBucket", price = 1)
p = Node(car2,car1)
lst = LinkedList(p)
lst.insertNode(car3)
lst.insertNode(car4)
lst.insertNode(car5)
它非常通用但它应该有用。