python删除二维列表中的单个元素

python删除二维列表中的单个元素,python,list,Python,List,我正在尝试建立一个强力数独解算器。我已经输入了我遇到问题的部分代码。column函数接受参数I和j,这两个参数对应于数独网格上有数字的坐标。我有一个叫做势的2D列表,每个都包含一个列表中的数字1-9。该函数的思想是,坐标I,J中的数字应从所有电位[I][k]列表中删除,其中k为整数 我所面临的问题是,无论i和k的值是多少,内联del势[i][k][index]都会导致内联数独[i][j]的每一次迭代都被删除 如果我只是犯了一个愚蠢的错误,或者我误解了2D列表的概念,我不确定是否有人能帮我。我已经

我正在尝试建立一个强力数独解算器。我已经输入了我遇到问题的部分代码。column函数接受参数I和j,这两个参数对应于数独网格上有数字的坐标。我有一个叫做势的2D列表,每个都包含一个列表中的数字1-9。该函数的思想是,坐标I,J中的数字应从所有电位[I][k]列表中删除,其中k为整数

我所面临的问题是,无论i和k的值是多少,内联del势[i][k][index]都会导致内联数独[i][j]的每一次迭代都被删除

如果我只是犯了一个愚蠢的错误,或者我误解了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)

您可能希望将代码减少到最少:创建一个。这将有助于说明问题。当你这样做的时候,你可能会解决你的问题。但即使没有,它也会让人们更容易解决您的问题。@anatolyg尽了我最大的努力使它更清晰。您可能希望将代码减少到最低限度:制作一个。这将有助于说明问题。当你这样做的时候,你可能会解决你的问题。但即使没有,人们也会更容易解决你的问题。@anatolyg尽了我最大的努力让它更清楚