要迭代的嵌套列表
cost =[[125900], [115000],
[105900],
[85000],
[150000],
[155249],
[97500]]
初始化变量
index = 0
cost_len = len(cost)
below_avg = 0
above_avg = 0
total = 0
For循环计算成本中所有元素的总和
for i in cost:
total = total + sum(i)
print(total)
计算平均成本
avg = total / len(cost)
尝试计算指数是否高于或低于平均值
for i in cost:
while index <= cost_len:
if i > avg:
above_avg+=1
elif i < avg:
below_avg +=1
index+=1
当尝试评估成本指数时,它返回“TypeError:unorderable types:list()>;float()”。如何将列表的索引与变量avg进行比较?你知道吗
如果您要处理数字列表或数字数组,那么我建议您使用Numpy(http://docs.scipy.org/doc/numpy/user/index.html)执行此任务:
cost - np.average(cost)
是一种使用Numpy广播功能的方法。您可以从数组(cost
)中减去单个值(np.average(cost)
),它将对整个数组进行减法运算,从而得到答案数组。你知道吗如果要比较每个子列表中的多个元素,则无需展平列表:
关于这个解决方案有两点:
total
和cost_len
的计算使用生成器,而不是根据结果创建列表。由于中间结果不需要额外的存储,因此这可以节省一些内存和可能的执行时间。你知道吗above
和below
是嵌套生成器,基本上相当于您尝试执行的嵌套循环。你知道吗下面是对最终嵌套循环的作用和修复方法的说明:
i
在cost
的元素上循环,但是内部的while
循环阻止它在处理i
的第一个值之后执行任何操作。注意,i
的值在内部循环中没有改变,因此第一个i
的比较是反复进行的,其他的则完全没有,因为index
到那时将是cost_len + 1
。要保留现有的双循环结构,可以执行以下操作:在这一点上,您并不真正需要
index
。你知道吗假设每个子列表有一个元素,flatten似乎是最好的:
相关问题 更多 >
编程相关推荐