Python新手求助:查找矩阵中同位置有非零公共元素的行
Python矩阵行公共非零元素查找方案
首先修正你的矩阵格式,Python列表里元素需要用逗号分隔,否则会报错:
A = [ [1, 1, 0, 0, 0, 0], [1, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0], [0, 0, 0, 1, 1, 1], [0, 0, 0, 1, 1, 1] ]
实现思路
遍历所有不重复的行对(避免重复检查比如(0,1)和(1,0)),对每一行对逐元素对比:只要存在至少一个位置,两行在该位置的元素都非零且相等,就记录这对行的索引。
代码实现
# 存储符合条件的行对 matching_pairs = [] rows = len(A) # 遍历所有i<j的行对 for i in range(rows): for j in range(i + 1, rows): # 检查当前行对是否存在相同位置的非零公共元素 has_common_nonzero = False for elem_i, elem_j in zip(A[i], A[j]): if elem_i != 0 and elem_i == elem_j: has_common_nonzero = True break # 找到一个就不用继续检查了 if has_common_nonzero: matching_pairs.append((i, j)) # 输出结果 print("存在相同位置非零公共元素的行对:") for pair in matching_pairs: print(f"行{pair[0]} 和 行{pair[1]}")
运行结果
存在相同位置非零公共元素的行对: 行0 和 行1 行3 和 行4
补充说明
- 代码里用
zip(A[i], A[j])同时遍历两行的元素,简洁高效; - 一旦找到符合条件的元素就
break,减少不必要的计算; - 如果你需要区分“完全相等的行”和“部分相同非零元素的行”,可以在判断里加额外条件:
exact_matches = [] partial_matches = [] for i in range(rows): for j in range(i + 1, rows): if A[i] == A[j]: exact_matches.append((i, j)) else: has_common = False for ei, ej in zip(A[i], A[j]): if ei !=0 and ei == ej: has_common = True break if has_common: partial_matches.append((i, j)) print("完全相等的行对:", exact_matches) print("部分相同非零元素的行对:", partial_matches)
运行后会输出:
完全相等的行对: [(3, 4)] 部分相同非零元素的行对: [(0, 1)]
内容的提问来源于stack exchange,提问作者Ludovica Spada Chiodo
相关产品推荐
相关产品推荐

