计算平均值并在平均值上拆分列表是行不通的



我有一个叫做汽车的项目列表。每辆车都是一个元组,其第一个元素是一个数字。我在所有汽车中找到这个数字的平均值,然后尝试将它们在中点分成两半,以进行分而治之算法。然而,所有的汽车都进入左侧,没有一辆进入右侧。

    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]

您需要将所有汽车编号的总和除以汽车数量 - 而不是 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:]

首先,检查代码的第一行:

l = 总和(汽车[1]表示车内车(/2

它应该看起来像这样:

l = sum(car[1] for car in cars(/len(cars(

两件事:"车中车"; 如果你想要平均值,你应该将 sum(( 除以汽车数量;

此外,任何序列(包括元组(的第一个元素的索引为 [0]。如果要在每个元组中使用实际的第一个元素,请将 [1] 替换为 [0]。

最新更新