我将数据结构化到一个嵌套列表my_lst
,循环的示例输出:
['A', 2312]
['B', 2000]
['C', 1312]
etc...
每个列表的元素1=download_budget
我有一个值download_total = 5000
我正试图根据以下规则,通过将download\u目标值分散到不同的列表中,为每个列表添加2个值:
示例使用:
my_lst = [['A', 2312],
['B', 2000],
['C', 1312],
['D', 3000]]
用download_total
作为5000
应该产生
['A', 2312, 0, 0]
['B', 2000, 265, 1] # total d/l = 2312
['C', 1312, 218, 2] # total d/l = 2312 + 2000 = 4312
['D', 3000, 906, 2] # total d/l = 5000
# i.e. (2 * 2047) + 906
第一个条目总是给定的偏移量(e.g. 0, 0)
。
第二个条目读取第一个条目(2312)的download_budget
,并尝试根据所描述的规则分散值,确保不超过download_total
。你知道吗
我的尝试:
el2 = 0
el3 = 0
for i, element in enumerate(my_lst):
if i == 0:
element.append(el2)
element.append(el3)
if i >= 1:
download_budget = my_lst[i-1][1]
while (download_budget > 2047):
el3 += 1
download_budget = download_budget - 2047
if download_budget < 2047:
el2 = download_budget
element.append(el2)
element.append(el3)
基本上,我已经掌握了如何做到这一点,但是知道是否有更好的方法来做到这一点会很有用
你的代码是在正确的轨道上,但不太工作,因为你没有积累下载预算,因为你遍历列表,并忽略了最终的情况。由于没有累积
download_budget
,您只满足了第二行(i == 1
)的while循环,因此其他任何东西都不能正常工作。你知道吗除了解决这些问题之外,您还可以通过使用模(
%
)来获得第三列,使用整数除法/余数(//
)来获得最后一列条目来简化它。你知道吗所以,代码应该是这样的:
我们的预期产出是:
如果你被什么东西困住了,只需删除一条评论,但是可能有点让人困惑的是
min()
函数的用法。在这一行中,are的目标是分配一个值-target
,这是我们的目标,即这一行的数字应该是多少(第三列和第四列)。你知道吗所以我们希望这个目标尽可能大:我们所有的预算。但是,如果are budget超过
download_total
(最后一行),我们希望这一行是下载总数,而不是更大的are budget。你知道吗相关问题 更多 >
编程相关推荐