我有一个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
答案 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)]