规范化嵌套列表中的数字

时间:2017-10-05 12:04:30

标签: python

我试图将下面列表中的第二项标准化为1.如果列表中的数字只包含在单个列表中,我可以这样做

rank = [['a', 234],['b',435],['c',567]]

ranking = [float(i)/sum(rank) for i in rank]

但是,当列表中有第二个项目并且嵌套时,它将失败并显示

ranking = [float(i[1])/sum(rank) for i[1] in rank]

2 个答案:

答案 0 :(得分:2)

函数调用cv::Mat mask; cv::inRange(src,40,60,mask); cv::bitwise_not(mask,mask); cv::bitwise_and(src,mask); 将尝试汇总sum(rank)列表的所有成员。如果它们不是数字(例如列表),则会失败。

您需要通过对列表元素求和来计算规范化器,例如:像这样:

rank

(另外,为每个列表成员计算规范化程序是错误的编码实践)。

这里是固定代码:

normalizer=sum([e[1] for e in rank])

答案 1 :(得分:2)

执行计算时必须考虑子列表的第二项

rank = [['a', 234],['b',435],['c',567]]

ranking = [[i[0],i[1]/sum(r[1] for r in rank)] for i in rank]

print(ranking)

结果

[['a', 0.18932038834951456], ['b', 0.35194174757281554], ['c', 0.4587378640776699]]

请注意,这是一个班轮,但效率不高,因为每次都会重新计算sum(r[1] for r in rank)。您可以先计算它,然后在列表推导中使用它。