Python 从for循环中查找前9个数字的平均值,然后查找下9个数字的平均值,依此类推

Python 从for循环中查找前9个数字的平均值,然后查找下9个数字的平均值,依此类推,python,python-3.x,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,…]的列表中?我尝试了很多东西,但这些值似乎不正确。正确的做法是什么 我

我有一个
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

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

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

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

尝试此操作

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

使用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)
这是做这件事最简单的方法。
您的解决方案即将推出。从
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

因为到目前为止没有人使用reduce:)


以<代码>数字
给出循环输出的单线解决方案:

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

有了数字列表后,您可以使用列表理解计算每组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]

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

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)]

我已经尝试了很多东西-请展示给他们看,我们可能会帮助你解决它们。@Thefourthey好的,一定要把你的问题分解成更小的部分。要采用9人一组的方式,您需要知道如何使9人一组以及如何采用9人一组的方式。我想在这种情况下,是前者给你带来了问题,所以你问的是关于组建团队的问题,而采取的手段是无关紧要的。幸运的是,如何将列表分组成大小相等的小列表已经被问了很多次。请注意,您在
if
块中执行
i=0
,然后紧接着执行
i+=1
。@muru试图指出的是,您正在计算0、1、2、3、4、5、7、8、1、2、3、4、5、7、8、1、2、3、3、4、4、5、6、7、8。当您仅将其设置为
0
时,不应增加
i
,因此您缺少了一个
else
。但是值%9将排除9个值的倍数,不是吗?很抱歉,我犯了一个错误,您应该使用for循环的迭代器代替该值!它将
0+1+2+3+4+5+6+7+8=36,36/9=4
然后将9添加到i,i变为18,然后
9+10+11+12+13+14+15+16+17=117,117/9=13
而18被省略,因为它只添加了完整的9个元素块
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)]