Python列重复检查器

时间:2014-03-12 21:10:52

标签: python

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。干杯

3 个答案:

答案 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