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

2024-10-01 22:25:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在试着做一个数独解算器,目前我正在做一个检查它是否被解决的部分,但我有点卡住了。网格是由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的形式显示列表。我怎样才能做到这一点?谢谢


Tags: 方法inselfboard网格列表for字典
2条回答

很难从你发布的小代码中分辨出你的问题到底在哪里,或者为了让它正常工作应该修改什么,但是根据你的问题标题和你提供的信息(你正在解数独),我可以说下面的内容将对你有所帮助。你知道吗

为了比较一个列表中的项目是否在另一个列表中,我们必须确定范围。你知道吗

假设我们有两个列表,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))

相关问题 更多 >

    热门问题