我有一个叫汽车的物品清单。每辆汽车都是一个元组,第一个元素是一个数字。我正在所有汽车中找到这个数字的平均值,然后尝试将它们在中点分成两半以进行分而治之算法。但是,所有汽车都进入左侧,而没有一辆进入右侧。
l = sum(car[1] for car in car)/2
# all cars go in to this side
leftBeds = [car for car in cars if car[1] <= l]
# no cars go into this side
rightBeds = [car for car in cars if car[1] > l]
答案 0 :(得分:3)
您需要将所有汽车数量的总和除以汽车数量-而不是2。
cars = [("car 1" ,1), ("car 2",2), ("car 3",3), ("car 4",4), ("car 5",5)]
l = sum(car[1] for car in cars)/len(cars)
# all cars go in to this side
leftBeds = [car for car in cars if car[1] <= l]
# no cars go into this side
rightBeds = [car for car in cars if car[1] > l]
print(l)
print(leftBeds,rightBeds)
输出:
3.0
[('car 1', 1), ('car 2', 2), ('car 3', 3)] [('car 4', 4), ('car 5', 5)]
如果您想要一个中点,为什么不简单地
lc = len(cars)
c1,c2 = cars[:lc//2], cars[lc//2:]
答案 1 :(得分:0)
首先,检查代码的第一行:
l = sum(car [1] for car in car)/ 2
它应该看起来像:
l = sum(汽车中的汽车[car [1]用于汽车)/ len(汽车)
两件事:“汽车中的汽车”;如果需要平均值,则应将sum()除以汽车数量;
此外,任何序列(包括元组)的第一个元素的索引均为[0]。如果要在每个元组中使用实际的第一个元素,请将[1]替换为[0]。