问题是这样的-给定一组整数的输入,从输入中连续奇数整数的每个序列中找到最大值的平均值。 例如:3,5,2,21,13,5,6,3,5,5,7 此输入实例具有三个连续的奇数整数(3,5),(21,13,5),(3,5,5,7)序列。由此,最大奇数分别为5、21和7。将找到这些平均值。
lst=[3,5,2,21,13,5,6,3,5,5,7]
s=set()
odd=[]
i=0
m=0
for loop in range(len(lst)):
while(i<len(lst)):
if lst[i]%2!=0:
odd.append(lst[i])
m=max(odd)
else:
for k in range(i,len(lst)):
if lst[k]%2!=0:
i=k
break
i+=1
s.add(m)
odd=[]
print (sum(s)/len(s))
我保留了一个奇数整数列表,每次都找到它们的最大值。当我遇到一个偶数整数时,我只是进行迭代并找到下一个奇数整数的索引。我将所有最大值保留在一组中,以免重复出现,最后打印平均值。 但是我得到的平均值是13而不是11。 逻辑有什么问题?
答案 0 :(得分:2)
可以使用itertools.groupby
和statistics.mean
轻松完成此任务。
from itertools import groupby
from statistics import mean
lst = [3,5,2,21,13,5,6,3,5,5,7]
print(mean(max(g) for k, g in groupby(lst, lambda x: x % 2) if k))
答案 1 :(得分:1)
您正在使用不能包含重复元素的set。您无需跟踪所有最大值,只需添加它们并保持计数即可。
lst=[3,5,2,21,13,5,6,3,5,5,7]
m=-1
sum=0
count=0
for loop in lst:
if loop%2 !=0:
if loop>m:
m = loop
else:
sum += m;
m = -1
count += 1
if(m != -1):
sum += m
count += 1
print (sum/count)
答案 2 :(得分:0)
这可以通过简单得多的方式完成,但是此答案符合您的逻辑:
lst=[3,5,2,21,13,5,6,3,5,5,7]
s=set()
odd=[]
i=0
m=0
for i in range(len(lst)):
if lst[i]%2!=0:
odd.append(lst[i])
if i==len(lst)-1:
m=max(odd)
s.add(m)
else:
if len(odd) > 0:
m=max(odd)
s.add(m)
odd=[]
print (s, sum(s)/len(s))