为了账号安全,请及时绑定邮箱和手机立即绑定

计算列表中某个值连续重复的最多次数?

计算列表中某个值连续重复的最多次数?

阿波罗的战车 2019-02-17 14:26:36
s = [-175, -842, -187, -66, -1, -1, -148, -17, -32, -35, 35, -1, -1, -1, -278, 278, -432, -92, -25, 549, -666, -45, -547, -38, -7, -101, -28, -43, -31, -4, 1510, -1958, -40, -25, -7, -1, -1, -1, -1, -15] 数据示例如上。想要把-1连续重复最多的次数算出来(例子中-1连续重复最多的是4次)。贴一下我的代码(错误的): #这里把 -1 的索引计算出来 nn = [] j = 0 for i in s: if i == -1: nn.append(j) j += 1 else: j += 1 continue print(nn) #根据前面计算出的索引,看看索引位置前的数值是否为- 1 jj = [] for i in nn: j = 1 print(i) print(i + j) if s[i] == -1 and s[i + j] == -1: jj.append(i+j) print(jj)
查看完整描述

5 回答

?
holdtom

TA贡献1805条经验 获得超10个赞

没脾气,for循环一遍跑不了了.

s = [-175, -842, -187, -66, -1, -1, -148, -17, -32, -35, 35, -1, -1, -1, -278, 278, -432, -92, -25,
     549, -666, -45, -547, -38, -7, -101, -28, -43, -31, -4, 1510, -1958, -40, -25, -7, -1, -1, -1, -1, -15]
Max = 0 # 已知最大连续出现次数初始为0
cur_repeat_time = 1 # 记录当前元素是第几次连续出现
pre_element = None  # 记录上一个元素是什么
for i in s:
    if i == pre_element: # 如果当前元素和上一个元素相同,连续出现次数+1,并更新最大值
        cur_repeat_time += 1 
        Max = max((cur_repeat_time, Max))
    else: # 不同则刷新计数器,配置pre  
        pre_element = i
        cur_repeat_time = 1

print(Max)

没审题,原来是要-1出现的次数,那就要在if那里判断是不是等于-1了,计数器初始值也得是0,else也不需要重置pre,直接重置计数器就可以了.

s = [-175, -842, -187, -66, -1, -1, -148, -17, -32, -35, 35, -1, -1, -1, -278, 278, -432, -92, -25,
     549, -666, -45, -547, -38, -7, -101, -28, -43, -31, -4, 1510, -1958, -40, -25, -7, -1, -1, -1, -1, -15]
Max = 1 if s else 0  # 已知最大连续出现次数,列表为空则为0
cur_repeat_time = 0  # 记录当前元素是第几次连续出现
for i in s:
    if i == -1:  # 如果当前元素和上一个元素相同,连续出现次数+1,并更新最大值
        cur_repeat_time += 1
        Max = max((cur_repeat_time, Max))
    else:  # 不同则刷新计数器,配置pre
        cur_repeat_time = 0

print(Max)
查看完整回答
反对 回复 2019-03-01
?
千巷猫影

TA贡献1829条经验 获得超7个赞

import itertools
s = [-175, -842, -187, -66, -1, -1, -148, -17, -32, -35, 35, -1, -1, -1, -278, 278, -432,-92, -25, 549, -666, -45, -547, -38, -7, -101,-28, -43, -31, -4, 1510, -1958, -40, -25, -7, -1, -1, -1, -1, -15]
a=[len(list(v)) for k,v in itertools.groupby(s) if k==-1]
print('-1连续出现的最大次数为:%d'%max(a))

查看完整回答
反对 回复 2019-03-01
?
慕哥6287543

TA贡献1831条经验 获得超10个赞

import itertools
s = [-175, -842, -187, -66, -1, -1, -148, -17, -32, -35, 35, -1, -1, -1, -278, 278, -432, -92, -25,
     549, -666, -45, -547, -38, -7, -101, -28, -43, -31, -4, 1510, -1958, -40, -25, -7, -1, -1, -1, -1, -15]
print(max([len(list(v)) for k,v in itertools.groupby(s)]))

4

查看完整回答
反对 回复 2019-03-01
?
达令说

TA贡献1821条经验 获得超6个赞

查看完整回答
反对 回复 2019-03-01
?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

from collections import Counter

s = [-175, -842, -187, -66, -1, -1, -148, -17, -32, -35, 35, -1, -1, -1, -278, 278, -432, -92, -25,
     549, -666, -45, -547, -38, -7, -101, -28, -43, -31, -4, 1510, -1958, -40, -25, -7, -1, -1, -1, -1, -15]


c = Counter(s)
most = c.most_common(1)[0]
print(most[1])
查看完整回答
反对 回复 2019-03-01
  • 5 回答
  • 0 关注
  • 671 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信