修正Python矩阵主副对角线重复元素判断代码的逻辑问题
问题修正:判断矩阵主对角线与反对角线是否存在重复元素
原代码无法正确输出结果的核心问题在于函数缩进错误,同时可以优化逻辑让代码更简洁可靠。以下是问题分析和修正方案:
原代码问题分析
- 缩进语法错误:
common_data函数内的for x in list1语句缩进不正确,直接导致代码无法正常运行。 - 逻辑冗余且不规范:嵌套循环判断重复元素的方式效率低,且函数未明确处理“无重复元素”的返回情况(虽实际运行会默认返回
None,但不符合代码规范)。
修正后的代码
import numpy as np m1 = np.arange(1, 10).reshape(3, 3) # 提取主对角线 diagonal = np.diag(m1) # 用numpy更简洁的方式提取反对角线 antdiagonal = np.diag(np.fliplr(m1)) # 高效判断是否存在共同元素 def common_data(list1, list2): # 集合交集不为空则说明有重复元素 return len(set(list1) & set(list2)) > 0 if common_data(diagonal, antdiagonal): print("hitter") else: print("Non-hitter")
代码说明
- 反对角线提取优化:通过
np.fliplr(m1)将矩阵左右翻转后提取对角线,替代手动循环,代码更简洁高效。 - 重复判断优化:利用集合交集特性判断重复,时间复杂度从原代码的O(n²)降至O(n),逻辑清晰且性能更好。
- 修复语法问题:彻底修正原函数的缩进错误,确保代码正常执行。
运行修正后的代码,针对主对角线[1,5,9]和反对角线[3,5,7]的场景,会正确输出hitter。
内容的提问来源于stack exchange,提问作者user20522246
相关产品推荐
相关产品推荐

