问题描述
我写了一个Python类( NRowsNTierShip ),该类应该代表集装箱船。
此类由插入函数组成,该函数对列表进行迭代,并将该列表的所有值插入二维数组(表示飞船)中。该值应放在总权重最小的行的免费层中。
权重最低的行和下一层由函数 get_next_postion 返回。
到目前为止,还算不错,但是使用 insert 函数在上一次运行时,它会覆盖已经分配的空间,并且不会将最后一个容器放置在该容器中。
实际上它应该看起来像这样:
1 7 9 12
2 6 10 11
3 4 5 8
但是看起来像这样:
1 7 9 0
2 6 10 11
3 4 5 12
这带给我我的实际问题,有人可以告诉我为什么会这样,并给我改善的建议吗?
提前感谢您的回答!
船级:
class NRowsNTieRSShip:
def __init__(self,rows: int,tiers: int):
self.rows: int = rows
self.tiers: int = tiers
self.bay: list = [
[
Container(0,0) for _ in range(self.tiers)
] for _ in range(self.rows)
]
def __repr__(self):
res: list = []
for row,data in enumerate(self.bay):
for tier,container in enumerate(self.bay[row]):
res.append('%2d ' % container.number)
res.append('\n')
return ''.join(res)
def _get_next_position_(self):
min_row,tier_list = min(enumerate(self.bay),key=lambda x: sum(y.weight for y in x[1]))
mintier = min(range(len(tier_list)),key=lambda x: tier_list[x].weight)
return min_row,mintier
def insert(self,data: list):
for container_list in data:
min_row,min_tier = self._get_next_position_()
self.bay[min_row][min_tier]: Container = Container(*container_list)
执行者:
def test(rows: int,tiers: int,data: list):
ship: NRowsNTieRSShip = NRowsNTieRSShip(rows=rows,tiers=tiers)
ship.insert(data=data)
print(ship)
if __name__ == '__main__':
sample_container_list: list = [
[1,23],[2,22],[3,11],[4,10],[5,9],[6,[7,8],[8,[9,[10,7],[11,[12,6]
]
test(rows=3,tiers=4,data=sample_container_list)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)