[英]Checking whether list in a dictionary is the same as another list?
我正在尝试制作Sudoku求解器,此刻,我正在制作检查其是否已解决的零件,但是我有点卡住了。 网格由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。 我尝试了一下然后尝试
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的列表。 我怎样才能做到这一点? 谢谢
很难从发布的代码中看出确切的问题所在,或者为了使其正常运行而需要更改的代码,但是根据您的问题标题和提供的信息(您正在解决Sudoku),我可以说以下内容对您有帮助。
为了比较一个列表中的项目是否在另一个列表中,我们必须确定范围。
假设我们有两个列表,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)
我认为您不能将列表与==
进行比较,但是这样的方法应该可以工作:
len(x)==len(y) and all(x[i] == y[i] for i in range(len(x)-1))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.