存在一个这样的list = [1,2,1,1,2,1,1,1,2]
我们可以发现单个1出现了一次
两个连续的1出现了一次
三个连续的1出现了一次
那么如何用python来实现这样一个统计呢
本人试过过多次迭代,可是效率极低
想有一个高效判断的方法
from collections import deque
def function_count(arr: list, target):
count_map = {}
queue = deque(arr)
cs = 0
symbol = arr[-1] == target
while queue:
data = queue.popleft()
if data == target:
cs += 1
else:
count_map[cs] = count_map.get(cs, 0) + 1
cs = 0
if symbol:
count_map[cs] = count_map.get(cs, 0) + 1
return count_map
if __name__ == '__main__':
a = [1, 2, 1, 1, 2, 1, 1, 1, 2, 1, 1, 2]
aim = 1
the_map = function_count(a, aim)
print("原数组:", a)
print("匹配目标:", aim)
for k, v in the_map.items():
print(f"连续的{k}个{aim}出现了{v}次")
可以使用数据结构队列,使用pop将列表最后的元素移除并返回,元素出现一次,第二次移除如果不是一样的元素则在出现一次里面+1,如果连续2次pop或者连续两次以上pop返回的元素均是相同的,那么我们就在相应的地方+1,当所有数字被移除完毕,我们就能得到List中连续出现相同次数元素的次数。
如果列表只有1,2两种元素的话,用以下办法:
>>> lst = [1,2,1,1,2,1,1,1,2]
>>> s = str(lst)[1:-1].replace(',','').replace(' ','').split('2')
>>> s
['1', '11', '111', '']
>>> s.count('1')
1
>>> s.count('1'*2) #即'11'
1
>>> s.count('1'*3) #即'111'
1