Python:如何统计列表中+1、-1连续出现的次数分布?
统计列表中±1连续出现次数的分布
核心实现思路
用基础循环遍历列表,跟踪当前连续的数值和计数,每次遇到不同数值时记录当前连续次数,最后整理成你需要的格式。
代码实现
from collections import defaultdict def count_consecutive(my_list): if not my_list: return {} # 初始化统计字典,键是连续次数,值是出现次数 stats = { 1: defaultdict(int), -1: defaultdict(int) } current_val = my_list[0] current_count = 1 # 从第二个元素开始遍历 for num in my_list[1:]: if num == current_val: current_count += 1 else: # 记录当前连续次数 stats[current_val][current_count] += 1 # 重置跟踪变量 current_val = num current_count = 1 # 记录最后一组连续次数(循环结束时未处理) stats[current_val][current_count] += 1 return stats # 测试示例 my_list = [1,1,1,-1,-1,1,1,1,-1,-1,1,-1,1] result = count_consecutive(my_list) # 转换成你需要的输出格式 def format_output(stats): part_1 = [] # 找出1的最大连续次数,确保覆盖从1到该值的所有次数 max_1 = max(stats[1].keys()) if stats[1] else 0 for i in range(1, max_1 + 1): part_1.append(f"{i}x{stats[1].get(i, 0)}") part_neg1 = [] max_neg1 = max(stats[-1].keys()) if stats[-1] else 0 for i in range(1, max_neg1 + 1): part_neg1.append(f"{i}x{stats[-1].get(i, 0)}") return f"(1:{','.join(part_1)}|-1:{','.join(part_neg1)})" print(format_output(result))
代码说明
- 统计逻辑:
- 用
stats字典分别存储1和-1的连续次数统计,defaultdict(int)可以自动处理未出现的连续次数(默认计数0)。 - 遍历列表时,相同数值就累加计数,不同数值就把当前计数存入对应统计字典,再重置跟踪变量。
- 遍历结束后必须处理最后一组连续数值,避免遗漏。
- 用
- 格式转换:
- 找出每个数值的最大连续次数,从1到这个最大值遍历,把每个次数的出现次数格式化成
次数x出现次数的形式,最后拼接成你需要的字符串。
- 找出每个数值的最大连续次数,从1到这个最大值遍历,把每个次数的出现次数格式化成
测试输出
运行示例代码后,输出为:
(1:1x2,2x0,3x2|-1:1x1,2x2)
内容的提问来源于stack exchange,提问作者Amir
相关产品推荐
相关产品推荐

