file = input("Enter a filename: ")
fi = open(file, "r")
for line in fi:
line = line.split()
c = len(line)
print(line)
print (c)
def anydup(line): # Checks for duplicates in the rows
seen = set()
for x in line:
if x in seen:print("There are some duplicate numbers in the rows")
seen.add(x)
print("There are no duplicates in the rows")
有人可以告诉我如何检查数字列中的重复项,我已经找到了如何在行中找到重复项。这是一个数独网格9x9。干杯
答案 0 :(得分:0)
每行和每列应设置seen
,总共18个。然后是您阅读的每个号码,检查行seen
和列seen
中的成员资格。
答案 1 :(得分:0)
这在效率方面不是最好的方法,但它很容易理解。我认为使用9x9网格,可理解性比速度更重要。
你有一个矩阵,行操作很简单,所以我们只需转置它。当我们的行成为我们的列时,我们可以再次使用anydup_row函数。
我将假设这些行全部完整,并且文件中的数据用空格分隔。
infile = input("Enter a filename: ") #Don't use python builtins for names!
fi = open(infile, "r")
matrix = map(lambda x: x.split(), fi.readlines())
def anydup_row(matrix): # Checks for duplicates in the rows
dupes = [False] * 9
for i, row in enumerate(matrix):
if len(set(row)) < 9:
dupes[i] = True
return dupes
def anydup_columns(matrix):
matrix_T = zip(*matrix)
return anydup_row(matrix_T)
答案 2 :(得分:0)
这就是检查重复项所需的全部内容。显然它也不能确保条目是1-9,但这似乎是理所当然的。
fi = input("Enter a filename: ")
grid = [line.split() for line in open(fi)]
for row in grid:
assert len(set(row)) == 9
for col in range(9):
assert len(set(row[col] for row in grid)) == 9