蟒蛇。删除2D列表的各个元素

时间:2020-05-20 17:27:54

标签: python list

我正在尝试构建强力sudoko求解器。我已经放入了我遇到问题的部分代码。 column函数接受参数I和j,它们对应于数独网格上具有数字的坐标。我有一个称为电势的2D列表,每个列表中都包含数字1-9。此函数的想法是,应从所有势能[I] [k]列表中删除在坐标I,J中找到的数字,其中K为整数。

即时通讯具有的问题是,在“ del电位[i] [k] [index]”行中,无论值如何,都会删除int(sudoku [I] [j])的每个单次迭代我和K。

我不确定是否有人可以帮助我,我是否犯了一个愚蠢的错误或者我是否对2D列表的概念有误解。一直试图纠正这四个小时,不知道去哪里。

import csv

suduku = []    

def column(i,j):
    for k in range (9): #maybe should be 8
        #for p in range (len(potentials[i][k])):
        #if potentials[i][k][p] == int(suduku[i][j]):
        if int(suduku[i][j]) in potentials[i][k]:
            index = potentials[i][k].index(int(suduku[i][j]))
            del potentials[i][k][index]
            if len(potentials[i][k]) == 1:
                suduku[i][k] = int(potentials[i][k][0])
                potentials[i][k][0] = 13
                potentials[i][k].append(13)
                toupdate.append([i,k]).
 with open('/Users/ianholdroyd/Documents/Code/misc/suduku.csv') as csvfile:
        suduku = list(csv.reader(csvfile, delimiter=' '))

potentials = [[[1,2,3,4,5,6,7,8,9]]*9]*9

toupdate = []

#while any('.' in sublist for sublist in suduku):
    for k in range (0,1,1):
        for i in range (9):
            if any('.' in sublist for sublist in suduku):
                for j in range (9):
                    if not suduku[i][j] == '.':
                        column(i,j)

为了更加清晰,我将完整的当前代码放在下面:

 import csv

suduku = []

def column(i,j):
    for k in range (9): #maybe should be 8
        #for p in range (len(potentials[i][k])):
        #if potentials[i][k][p] == int(suduku[i][j]):
        if int(suduku[i][j]) in potentials[i][k]:
            index = potentials[i][k].index(int(suduku[i][j]))
            del potentials[i][k][index]
            if len(potentials[i][k]) == 1:
                suduku[i][k] = int(potentials[i][k][0])
                potentials[i][k][0] = 13
                potentials[i][k].append(13)
                toupdate.append([i,k])

def row(i,j):
    for k in range (9): #maybe should be 8
        if int(suduku[i][j]) in potentials[k][j]:
            potentials[k][j].remove(int(suduku[i][j]))
            if len(potentials[k][j]) == 1:
                suduku[k][j] = int(potentials[k][j][0])
                potentials[k][j][0:1] = 13
                potentials[k][j].append(13)
                toupdate.append([k,j])

def whichsquare(num):
    if num >= 2:
        return 0
    elif num >= 5:
        return 3
    elif num >=8:
        return 6

def square(i,j):
    x = whichsquare(i)
    y = whichsquare(j)
    for p in range (x, x+3, 1):
        for q in range (y, y+3, 1):
            if int(suduku[i][j]) in potentials[p][q]:
                potentials[q][q].remove(int(suduku[i][j]))
            if len(potentials[p][q]) == 1:
                suduku[p][q] = int(potentials[p][q][0])
                potentials[p][q][0:1] =13
                potentials[p][q].append(13)
                toupdate.append([p,q])


with open('/Users/ianholdroyd/Documents/Code/misc/suduku.csv') as csvfile:
    suduku = list(csv.reader(csvfile, delimiter=' '))

potentials = [[[1,2,3,4,5,6,7,8,9]]*9]*9

toupdate = []

#while any('.' in sublist for sublist in suduku):
for k in range (0,1,1):
    for i in range (9):
        if any('.' in sublist for sublist in suduku):
            for j in range (9):
                if not suduku[i][j] == '.':
                    column(i,j)
                    row(i,j)
                    #square(i,j)
                if any('.' in sublist for sublist in suduku):
                    if len (toupdate) >= 1:
                        column(toupdate[0][0],toupdate[0][1])
                        row(toupdate[0][0],toupdate[0][1])
                        #square(toupdate[0,0],toupdate[0,1])

print (potentials)

0 个答案:

没有答案
相关问题