如何使用Python内置函数获取矩阵每列从底部开始的连续1高度
矩阵列高度统计实现方案
规则说明与逻辑修正
统计规则为仅统计从矩阵底部向上的连续相邻1,遇到第一个0即终止当前列计数,不需要统计上方不与底部连通的其他1段。
原有逻辑问题:之前的实现是统计整列中最大连续1的长度,和需求规则不符,无需记录历史最大连续值,遇到第一个0直接终止遍历即可。
实现代码
仅使用Python内置函数实现,无第三方依赖:
matrix = [['0', '0', '0', '0', '0', '1', '1', '0', '0', '0'], ['0', '1', '1', '1', '1', '1', '0', '0', '0', '0'], ['0', '0', '1', '1', '0', '1', '0', '1', '1', '0'], ['0', '1', '0', '0', '0', '0', '1', '0', '0', '1'], ['0', '0', '0', '1', '0', '0', '1', '0', '1', '0'], ['0', '0', '0', '0', '1', '0', '1', '1', '1', '0'], ['0', '1', '1', '1', '1', '0', '1', '1', '1', '1'], ['1', '1', '1', '1', '1', '1', '1', '1', '1', '1']] # 反转矩阵,将原矩阵最底部的行调整为列表首元素,遍历顺序等价于从下往上计数 reverse_mat = list(reversed(matrix)) width = len(matrix[0]) result = [] for col_idx in range(width): col_height = 0 for row in reverse_mat: if row[col_idx] == '1': col_height += 1 else: # 遇到第一个0直接终止当前列计数,无需继续向上遍历 break result.append(col_height) print(result)
输出结果
运行代码输出为:
[1, 2, 2, 2, 3, 1, 5, 3, 4, 2]
和预期结果一致,你提到的最终期望输出最后一位为1属于手笔误差。
内容的提问来源于stack exchange,提问作者CaptainGuan
相关产品推荐
相关产品推荐

