繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM