You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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))

代码说明

  1. 统计逻辑:
    • 用stats字典分别存储1和-1的连续次数统计,defaultdict(int)可以自动处理未出现的连续次数(默认计数0)。
    • 遍历列表时,相同数值就累加计数,不同数值就把当前计数存入对应统计字典,再重置跟踪变量。
    • 遍历结束后必须处理最后一组连续数值,避免遗漏。
  2. 格式转换:
    • 找出每个数值的最大连续次数,从1到这个最大值遍历,把每个次数的出现次数格式化成次数x出现次数的形式,最后拼接成你需要的字符串。

测试输出

运行示例代码后,输出为:

(1:1x2,2x0,3x2|-1:1x1,2x2)

内容的提问来源于stack exchange,提问作者Amir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 10:36:07