我正在尝试制作一个数独求解器,而此刻我正在制作检查它是否已经解决的部分,但我已经坚持下去了。网格由81个数字(9 * 9)的列表组成,然后我有字典将它们分组为行,列和框,例如:
self.rows = {'toptop':self.board[0:9],'topmid':self.board[9:18],'topbottom':self.board[18:27],
'midtop':self.board[27:36],'midmid':self.board[36:45],'midbottom':self.board[45:54]
, 我坚持的一点是检查每行,或列或框中是否有数字1-9。我试验了abit并尝试了
self.winning = [1,2,3,4,5,6,7,8,9]
[x for x in self.rows.values() if (x == y for y in self.winning)]
但是,这只返回了分组为行的每个值。我也试过这个变种,有些会返回数字为1-9的列表,但它们经常有重复;他们绝不会单独以1-9显示列表。我怎么能实现这个目标?感谢
答案 0 :(得分:1)
很难说出你的问题所在的小代码究竟在哪里发布,或者为了使其有效而改变了什么,但是根据你的问题标题和你提供的信息(你正在解决数独) )我可以说以下内容对你有帮助。
为了比较列表中的项目是否在另一个列表中,我们必须确定范围。
我们说我们有两个名单,A和B.
A == B
# lists are in the same order with the same items.
all(a in B for a in A)
# all items in A are in B. (order not checked)
all(b in A for b in B)
# all items in B are in A. (order not checked)
all(A[i] == B[i] for i in range(len(A)))
# all items in A are in B. (order checked) (len(A) <= len(B))
all(B[i] == A[i] for i in range(len(B)))
# all items in B are in A. (order checked) (len(B) <= len(A))
这是一个可以在等长列表上使用的生成器,用于检查它们的真实/错误指数
def gen_diff(A, B):
if len(A) != len(B):
raise IndexError('lists not of same length')
for i in range(len(A)):
if A[i] == B[i]:
yield (True, i)
else:
yield (False, i)
答案 1 :(得分:-3)
我认为你不能将列表与==
进行比较,但这样的事情应该有效:
len(x)==len(y) and all(x[i] == y[i] for i in range(len(x)-1))