检查字典中的列表是否与另一个列表相同?

时间:2013-04-07 09:01:23

标签: python 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。我试验了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显示列表。我怎么能实现这个目标?感谢

2 个答案:

答案 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))