【发布时间】:2017-08-24 08:56:39
【问题描述】:
我遇到了这样一种情况,即我的 python 代码在类似情况下表现不同。代码如下:
import time
def greedy_cow_transport(cows,limit=10):
weights = []
for weight in cows.values():
weights.append(weight)
weights.sort(reverse=True)
cows_copy = cows.copy()
all_trips = []
while (len(weights) > 0):
avail_weight = limit
curr_trip = []
for weight in weights:
if weight <= avail_weight:
for n, w in cows_copy.items():
if weight == w:
curr_trip.append(n)
weights.remove(weight)
cows_copy.pop(n, None)
avail_weight -= w
break
all_trips.append(curr_trip)
return all_trips
cows = {'Lola': 2, 'Oreo': 2, 'Millie': 2, 'Betsy': 2, 'Moo Moo': 2, 'Milkshake': 2, 'Herman': 2, 'Florence': 2, 'Maggie': 2, 'Henrietta': 2}
limit=100
print(cows)
print(greedy_cow_transport(cows))
而不是 greedy_cow_transport 返回 5 个成员的 2 个列表,它返回 3 个不同的 5 3 2 个成员列表。请解释为什么会这样?我知道,我可能遗漏了一些微妙的细节,但我需要帮助。无法弄清楚错误。 谢谢。
【问题讨论】:
-
你的代码应该将一个字典分成几部分,每个部分都有一个总值
-
吸引我们的总是微妙的细节不是吗?
-
非常小的旁注:您对
weights的整个初始化可以简化为weights = sorted(cows.values(), reverse=True)。即使不需要排序,具有重复appends 的未修改值的显式循环也将简化为单个.extend调用(或者如果列表最初为空,则直接使用list(someiterable)构造它)。跨度>
标签: python list python-3.x for-loop