在一个奇数整数序列中找到最大值的平均值

时间:2019-09-05 13:05:00

标签: python

问题是这样的-给定一组整数的输入,从输入中连续奇数整数的每个序列中找到最大值的平均值。 例如: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。 逻辑有什么问题?

3 个答案:

答案 0 :(得分:2)

可以使用itertools.groupbystatistics.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))