python如何统计list有几个连续的数字

比如mylist=[1,1,0,1,1,1,0,0,0,0,1,1,1,1,0,1,0,11,0]怎么写才可以知道1最多连续出现4次。0最多出现4次呢?... 比如mylist = [1,1,0,1,1,1,0,0,0,0,1,1,1,1,0,1,0,11,0]
怎么写才可以知道1最多连续出现4次。 0最多出现4次呢?
展开
 我来答
lreper
推荐于2016-08-27 · TA获得超过412个赞
知道小有建树答主
回答量:243
采纳率:100%
帮助的人:285万
展开全部
mylist = [1,1,0,1,1,1,0,0,0,0,1,1,1,1,0,1,0,11,0]

result = {}
tmp = None
for i in mylist:
        if not result.has_key(i):
        #新出现的值为1
                result[i] = {'tmpcount':1,'maxcount':1}
        else:
                if i == tmp :
                #同上一次相同,tmpcount数字加一,同时更新maxcount
                        result[tmp]['tmpcount'] = result[tmp]['tmpcount'] + 1
                        if result[tmp]['maxcount'] < result[tmp]['tmpcount']:
                                result[tmp]['maxcount'] = result[tmp]['tmpcount']
                else:
                #如果不同,上次数字的tmpcount归零,这次的数字的tmpcount归一
                        result[i]['tmpcount'] = 1
                        result[tmp]['tmpcount'] =  0                  
        tmp = i

for j,k in result.items():
        print '数字' + str(j) + '出现的最大连续次数为' + str(k['maxcount'])

 试试这个,有点麻烦但应该可以解决这个问题

liuweiathust
2015-06-12 · TA获得超过661个赞
知道小有建树答主
回答量:142
采纳率:100%
帮助的人:170万
展开全部

先使用itertools.groupby,对每个连续的数字进行分组

import itertools
num_times = [(k, len(list(v))) for k, v in itertools.groupby(mylist)]

这样得到的num_times是每个数字连续出现的次数

num_times = [
(1, 2), (0, 1), (1, 3), 
(0, 4), (1, 4), (0, 1), 
(1, 1), (0, 1), (11, 1), 
(0, 1)]

然后对每个数字,统计出现的最大次数,这一步比较简单就自己想想吧

追问
有简单的方法吗  不要import的
追答
越要简单越应该用标准库啊
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
阿斯顿飞过传奇
2018-10-24
知道答主
回答量:1
采纳率:0%
帮助的人:813
展开全部
mylist = [1,1,0,1,1,1,0,0,0,0,1,1,1,1,0,1,0,1,1,0]    
mystr=''.join(map(str,mylist))   #先转化为字符串
for i in set(mystr):
    print(i,max(list(map(lambda x:len(x),[j for j in mystr.split(i)]))))  #使用map跟lambda函数对分割后的列表各元素求长度

缺陷是只能处理列表中只有两种数字的

后来改了一下 先可以把列表变为只有0跟1的数据  然后再按上面的思路来

mylist = [1,1,0,1,1,2,2,1,0,0,0,0,1,1,2,2,2,1,1,0,1,0,1,2,2,1,0]   
for j in set(mylist):
    list1=[1 if i==j else 0 for i in mylist ]
    mystr=''.join(map(str,list1))
    print(j,max(list(map(lambda x:len(x),[j for j in mystr.split('0')]))))
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式