如何简化提取二维网格右下对角线字符串的Python代码且保持输出不变
右下方向对角线上的元素满足行索引+列索引的和相等,比如(0,1)和(1,0)的行+列都是1,属于同一条对角线,我们可以基于这个规律用基础语法实现,全程只用到循环、列表、字典这些入门知识点:
def diagsDownRight(M): row_count = len(M) col_count = len(M[0]) # 字典存储所有对角线:key为行索引+列索引的和,value为对应对角线的字符列表 diag_map = {} # 遍历网格中所有元素 for row_idx in range(row_count): for col_idx in range(col_count): key = row_idx + col_idx # 首次遇到该key时初始化空列表 if key not in diag_map: diag_map[key] = [] # 把当前字符加入对应对角线的列表 diag_map[key].append(M[row_idx][col_idx]) # 按key从小到大排序,拼接为字符串后返回 result = [] for key in sorted(diag_map.keys()): result.append(''.join(diag_map[key])) return result
测试验证
用你提供的mystery网格测试:
mystery = [["r","a","w","b","i","t"], ["x","a","y","z","c","h"], ["p","q","b","e","i","e"], ["t","r","s","b","o","g"], ["u","w","x","v","i","t"], ["n","m","r","w","o","t"]] print(diagsDownRight(mystery))
输出结果与原代码完全一致,功能完全相同。
内容的提问来源于stack exchange,提问作者Bruffff
相关产品推荐
相关产品推荐

