计算平均值并在平均值上拆分列表不起作用

时间:2019-04-02 21:17:44

标签: python

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

    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 个答案:

答案 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]。