找到前9个数字的平均值然后查找接下来的9个数字,依此类推for for

时间:2016-12-27 11:11:19

标签: python python-3.x

我有一个for循环,它给出了以下输出。

0.53125
0.4375
0.546875
0.578125
0.75
0.734375
0.640625
0.53125
0.515625
0.828125
0.5
0.484375
0.59375
0.59375
0.734375
0.71875
0.609375
0.484375
.
.
.

如何找到前9个值的平均值,接下来的9个值等等,并将它们存储到像[0.58,0.20,...]这样的列表中?我尝试了很多东西,但价值观似乎不正确。这样做的正确方法是什么?

我做了什么:

matchedRatioList = []
matchedRatio = 0
i = 0
for feature in range(90):
    featureToCompare = featuresList[feature]
    number = labelsList[feature]
    match = difflib.SequenceMatcher(None,featureToCompare,imagePixList)
    matchingRatio = match.ratio()
    print(matchingRatio)
    matchedRatio += matchingRatio
    if i == 8:
        matchedRatioList.append(matchedRatio / 9)
        i = 0
        matchedRatio = 0
    i += 1

8 个答案:

答案 0 :(得分:2)

你的解决方案很接近。从i = 1开始,然后检查i == 9

matchedRatioList = []
matchedRatio = 0
i = 1   # change here
for feature in range(90):
    ...
    matchedRatio += matchingRatio
    if i == 9:  # change here
        matchedRatioList.append(matchedRatio / 9)
        i = 0
        matchedRatio = 0
    i += 1

答案 1 :(得分:2)

获得数字列表后,您可以使用列表推导计算每组9个数字的平均值:

from statistics import mean

numbers = [0.53125, 0.4375, 0.546875, 0.578125, 0.75, 0.734375, 0.640625,
           0.53125, 0.515625, 0.828125, 0.5, 0.484375, 0.59375, 0.59375, 
           0.734375, 0.71875, 0.609375, 0.484375]

group_len = 9
matched_ratios = [mean(group) for group in [numbers[i:i+group_len] 
                  for i in range(0, len(numbers), group_len)]]
print(matched_ratios)
# [0.5850694444444444, 0.6163194444444444]

答案 2 :(得分:0)

我不知道你到目前为止尝试了什么,但我可以为你提供一个问题的解决方案。

将for-loop中的所有值保存到缓冲区数组中。在for循环中使用带有iterator % 9 == 0的if语句,这将使某些部分代码仅执行每9个值。

在if语句中,您可以将缓冲区数组的平均值写入不同的输出数组。在if-statement中重置缓冲区数组,然后重复此过程并按照您想要的方式运行。

答案 3 :(得分:0)

试试这个

r = []
for b in a:
    c += b
    if i == 8:
        c = c/9
        r.append(c)
        c = 0
        i = 0
    i += 1

答案 4 :(得分:0)

使用Python的统计模块中的mean函数。

import statistics
# Sample Values list I created.
values_list = list()
for i in range(1,82):
    values_list.append(i)
mean_list = list()
for i in range(0, len(values_list), 9):
    mean_list.append(statistics.mean(values_list[i:i+9]))
for i in mean_list:
    print(i)

这是您可以执行此操作的最简单方法。 https://docs.python.org/3/library/statistics.html#statistics.mean

答案 5 :(得分:0)

因为到目前为止没有人使用过减少:)

import functools
l = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18]
m = []
for i in range(9,len(l), 9):
    m.append(functools.reduce(lambda x, y: x + y, l[i-9:i])/9)
print(m)

答案 6 :(得分:0)

numbers中给出循环输出的单行解决方案:

[float(sum(a))/len(a) for a in zip(*[iter(numbers)]*9)]

答案 7 :(得分:0)

将其他答案中的想法放在一起,这可能是整个计划:

from statistics import mean

matching_ratios = (difflib.SequenceMatcher(None, feature, imagePixList).ratio()
                   for feature in featuresList[:90])
matchedRatioList = [mean(group) for group in zip(*[matching_ratios] * 9)]