我试图在数组中找到重复但我想忽略重复的零。
这是我的代码到目前为止,如果有人能告诉我哪里出错了那就太棒了。
在这个问题中,数组中没有重复项,但是当我使用和不使用重复项运行它时,它总是返回'Error'
import sys
mat =[[0,5,0,0,0,0,0,0,0],[0,0,0,0,4,0,0,0,3],[0,1,0,0,9,2,6,0,0],[0,0,0,0,2,4,0,8,0], [0,0,7,0,0,0,0,6,0],[4,0,0,8,1,0,7,0,0],[0,0,1,4,0,7,0,5,6],[0,0,5,0,8,0,0,9,4],[0,0,0,0,0,0,8,0,0]]
def check_duplicate():
global mat
for row in mat:
for num in row:
if (num != 0):
ls = [num]
sort = sorted(ls)
if (sort != set(sort)):
sys.exit('Error')
答案 0 :(得分:2)
有一种更简单的方法可以做到这一点......只需将所有不为0的数字附加到一个检查列表中,如果要将相同的数字追加两次,则引发错误:
#mat is your matrix
for row in mat:
hold = []
for num in row:
if num in hold:
raise ValueError("There was an illegal repetition")
elif num != 0:
hold.append(num)
基本上这样做是将所有不为0的数字放在列表hold
中。但在它输入数字之前,它会检查该数字是否已经在hold
中,如果是,则会引发ValueError
。然后列表在矩阵的每一行重置为空白并重复。
答案 1 :(得分:0)
排序(...)返回排序列表,不能等于集合
1.def a func来过滤掉行中的零
func = lambda l : [num for num in l if num != 0]
2.检查每行中的副本
for row in map(func, mat):
if len(row) != len(set(row)):
#error message
3.检查多行重复,@ aIKID的答案工作正常,感谢纠正
答案 2 :(得分:0)
首先删除所有零,然后检查这些集是否已存在于现有列表中:
def check(l):
l = [[j for j in i if j != 0] for i in l]
new = []
#after throwing all the zeroes:
for row in l:
if set(row) in new:
raise ValueError("There are multiple items")
else:
new.append(set(row))
希望这有帮助!