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