Python统计两个列表相同索引共现连续0簇的位置与数量
双列表公共连续0簇统计代码修复
原有单列表逻辑
实现单个列表的连续0簇统计,遍历列表时每一段连续的0记为1个簇,同时记录每个簇的起止索引,示例输出如下:
Position start 5, Position end 8, Count 1 Position start 12, Position end 12, Count 2 Position start 14, Position end 14, Count 3 Position start 26, Position end 31, Count 4
原单列表实现代码:
a= [1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1] last_was_0=False zero_clusters=[] for i in range(len(a)): b=a[i] if b==0: if last_was_0: zero_clusters[-1][-1]+=1 else: zero_clusters.append([i, i]) last_was_0 = b==0 for i in range(len(zero_clusters)): print(f'Position start {zero_clusters[i][0]}, Position end {zero_clusters[i][1]}, Count {i+1}')
双列表适配需求
将逻辑适配到两个等长列表,仅当两个列表相同索引位置的元素都为0时,才计入有效0位置,连续的有效0位置算作1个簇,统计每个簇的起止位置和序号。
现有代码错误点
修改后的代码存在两个核心问题:
- 变量命名冲突:循环内第一行
b=a[i]覆盖了原本存储第二个列表的变量b,后续c=b[i]实际是尝试对整数取索引,逻辑完全错误 - 状态判断错误:
last_was_0的赋值仅判断了单值为0,没有判断两个列表同位置都为0的条件,状态更新不符合需求
修复后可运行代码
a = [1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1] b = [1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1] last_was_valid_zero = False zero_clusters = [] for i in range(len(a)): current_valid = a[i] == 0 and b[i] == 0 if current_valid: if last_was_valid_zero: zero_clusters[-1][1] = i else: zero_clusters.append([i, i]) last_was_valid_zero = current_valid for idx, cluster in enumerate(zero_clusters, 1): print(f'Position start {cluster[0]}, Position end {cluster[1]}, Count {idx}')
输出结果
使用示例中两个完全相同的列表测试,输出如下:
Position start 5, Position end 8, Count 1 Position start 12, Position end 12, Count 2 Position start 14, Position end 14, Count 3 Position start 28, Position end 33, Count 4 Position start 36, Position end 36, Count 5 Position start 38, Position end 38, Count 6 Position start 40, Position end 40, Count 7
内容的提问来源于stack exchange,提问作者BearGrillz
相关产品推荐
相关产品推荐

