使用 python 处理行李?集装箱后进,后出,行李先进先出
handling luggage using python? last container in, last out, first luggage in first out
你如何使用python解决这个问题?
您将行李装入集装箱。一旦容器达到其极限(100 磅)。你移动到下一个容器。这就是你装载行李的方式。
当需要卸载数据时,您将首先卸载最后一个装载的集装箱(小于 100 磅。然后从中取出第一个装载的行李,然后是第二个,依此类推)然后您将移动到下一个容器。
如果问题不清楚。
这是加载数组的样子
假设我们有 3 个集装箱,这是装载安排
[30,45,15,25,50,20,30,60]
此数组中的最后一项是最先加载的。第二个行李箱后,第一个集装箱装不下20磅的行李,所以进入下一个集装箱。
20,50,25进入第二个,15,45,30进入最后一个
卸货时间到了,我们从最后一个集装箱的第一个行李开始,并按顺序移动。
因此卸载数组为
[15,45,30,20,50,25,60,30]
是否有函数可以将输入转换为输出?
请记住,每个容器的重量必须保持在 100 磅以下??
有什么想法或想法吗?
对不起,如果问题漫无边际,这是我在堆栈上的第一个问题
谢谢!
这是我迄今为止尝试过的方法:
A=[15,20,25,45,20,30,65]
output=[20,15,20,45,25,65,30]
def input_output(A):
for i in range(1,len(A)):
B=[]*len(A)
if A[-i]<100:
B[0]=A[-i]
B[i]=A[-i-1]+B[i-1]
if B[i]>100:
for j in range(1,i):
C=[]*len(A)
C[-i]=A[i-len(A)]# Need a subarray to get reversed.
#I don't feel this is going the right direction
# C is my intended output array
你需要考虑一下你的算法。
您正在基于 100 创建 bin,因此构造它们然后解构以获得您的预期输出。使用 [-1]
作为索引意味着总是添加到 bins
:
中的最后一个 bin
A = [15,20,25,45,20,30,65]
bins = [[]]
for i in reversed(A):
if sum(bins[-1]) + i > 100:
bins.append([])
bins[-1].append(i)
>>> bins
[[65, 30], [20, 45, 25], [20, 15]]
所以您只需要将垃圾箱倒转并压平即可,这可以通过多种方式完成:
>>> [a for b in reversed(bins) for a in b]
[20, 15, 20, 45, 25, 65, 30]
# Or
>>> sum(reversed(bins), [])
[20, 15, 20, 45, 25, 65, 30]
# Or
>>> import itertools as it
>>> list(it.chain.from_iterable(reversed(bins)))
[20, 15, 20, 45, 25, 65, 30]
你如何使用python解决这个问题?
您将行李装入集装箱。一旦容器达到其极限(100 磅)。你移动到下一个容器。这就是你装载行李的方式。
当需要卸载数据时,您将首先卸载最后一个装载的集装箱(小于 100 磅。然后从中取出第一个装载的行李,然后是第二个,依此类推)然后您将移动到下一个容器。
如果问题不清楚。
这是加载数组的样子
假设我们有 3 个集装箱,这是装载安排
[30,45,15,25,50,20,30,60]
此数组中的最后一项是最先加载的。第二个行李箱后,第一个集装箱装不下20磅的行李,所以进入下一个集装箱。
20,50,25进入第二个,15,45,30进入最后一个
卸货时间到了,我们从最后一个集装箱的第一个行李开始,并按顺序移动。
因此卸载数组为
[15,45,30,20,50,25,60,30]
是否有函数可以将输入转换为输出?
请记住,每个容器的重量必须保持在 100 磅以下??
有什么想法或想法吗?
对不起,如果问题漫无边际,这是我在堆栈上的第一个问题
谢谢!
这是我迄今为止尝试过的方法:
A=[15,20,25,45,20,30,65]
output=[20,15,20,45,25,65,30]
def input_output(A):
for i in range(1,len(A)):
B=[]*len(A)
if A[-i]<100:
B[0]=A[-i]
B[i]=A[-i-1]+B[i-1]
if B[i]>100:
for j in range(1,i):
C=[]*len(A)
C[-i]=A[i-len(A)]# Need a subarray to get reversed.
#I don't feel this is going the right direction
# C is my intended output array
你需要考虑一下你的算法。
您正在基于 100 创建 bin,因此构造它们然后解构以获得您的预期输出。使用 [-1]
作为索引意味着总是添加到 bins
:
A = [15,20,25,45,20,30,65]
bins = [[]]
for i in reversed(A):
if sum(bins[-1]) + i > 100:
bins.append([])
bins[-1].append(i)
>>> bins
[[65, 30], [20, 45, 25], [20, 15]]
所以您只需要将垃圾箱倒转并压平即可,这可以通过多种方式完成:
>>> [a for b in reversed(bins) for a in b]
[20, 15, 20, 45, 25, 65, 30]
# Or
>>> sum(reversed(bins), [])
[20, 15, 20, 45, 25, 65, 30]
# Or
>>> import itertools as it
>>> list(it.chain.from_iterable(reversed(bins)))
[20, 15, 20, 45, 25, 65, 30]