【发布时间】:2020-05-23 03:13:41
【问题描述】:
我有一个包含 3 个元组的装箱问题解决方案的列表,如下所示:
sorted_sol = [(0, 1, 170), (1, 1, 250), (2, 1, 250), (3, 1, 62), (3, 2, 30), (4, 1, 62), (4, 3, 62), (5, 2, 122), (6, 1, 212)]
例如,第一个 3-Tuple 表示从长度 0 到 1 @ 170
我正在尝试将 3-Tuples 列表转换为 matplot 堆积条形图的列表列表,但我正在努力处理循环逻辑。结果应该是。
import matplotlib.pyplot as plt
import numpy as np
bars = list(set([int(i[0]) for i in sorted_sol]))
#loop logic here to end up with data
b1 = [170, 250, 250, 62, 62, 122, 212]
b2 = [0, 0, 0, 30, 62, 122, 0]
b3 = [0, 0, 0, 30, 62, 0, 0]
b4 = [0, 0, 0, 0, 62, 0, 0]
data =[b1, b2, b3, b4]
for c in range(0, 3):
if c == 0:
plt.bar(bars, data[c])
else:
plt.bar(bars, data[c], bottom=data[c-1])
plt.show()
此外,底部属性似乎对我不起作用,因为它似乎无法正确堆叠第 3 条和第 4 条。
【问题讨论】:
-
鉴于您的元组列表,我不确定输出应该是什么样子。您能否提供有关如何正确处理数据的更多信息。
-
请参阅下面来自 Quang Hoang 的帖子以了解所需的输出。仍在寻找循环逻辑从
sorted_sol到达data -
如果您将规则包含在问题中,则这些规则不清楚。您可能应该发布您想出的循环并解释为什么它有缺陷。它可能会让您更清楚如何将元组列表转换为四个
b列表。 -
for s, (a, b, c) in enumerate(sorted_sol):print("From length " + str(a) + " cut " + str(b) + " @ " + str(c))从长度 0 切割 1 @ 170 从长度 1 切割 1 @ 250 从长度 2 切割 1 @ 250 从长度 3 切割 1 @ 62 从长度 3 切割 2 @ 30 从长度 4 切割1 @ 62 从长度 4 切割 3 @ 62 从长度 5 切割 2 @ 122 从长度 6 切割 1 @ 212 我想我遇到的最大问题是len(sorted_sol)是 9 而len(b1)或独特的库存长度是7 使循环逻辑对我来说很困难。 :) 我还应该指出,装箱问题的库存长度是 250 -
您需要不同的“b”变量吗?还是直接去
data就够了?
标签: python matplotlib tuples bin-packing