python如何统计list有几个连续的数字12
发布网友
发布时间:2023-10-29 11:59
我来回答
共3个回答
热心网友
时间:2024-07-19 03:17
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'])
试试这个,有点麻烦但应该可以解决这个问题
热心网友
时间:2024-07-19 03:14
先使用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)]
然后对每个数字,统计出现的最大次数,这一步比较简单就自己想想吧
热心网友
时间:2024-07-19 03:18
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')]))))