2013-04-07 3 views
0

나는 스도쿠 (Sudoku) 해결사를 만들려고 노력하고 있으며, 순간적으로 나는 그것이 해결 되었는가를 확인하는 부분을 만들고 있지만, abit 붙어있다. 그리드는 (9 * 9), 그리고 내가하는 그룹화 행, 열 및 박스, 등으로 사전이 81 개 숫자의 목록으로 구성됩니다 사전 목록이 다른 목록과 같은지 확인 하시겠습니까?

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 목록을 표시하지 않을 것입니다. 내가 어떻게 이걸 얻을 수 있니? 감사합니다

난 당신이 ==과 목록을 비교 할 수 있다고 생각하지 않지만,이 같은 일을해야
+0

[python sets] (http://docs.python.org/library/sets.html)을 조사해야합니다. – hd1

+1

Spoiler : 해결사를 준비한 후 "Norvig sudoku"에 대한 Google – georg

답변

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

거짓 당신은 그들이에 해당와 indices 무엇인지 확인하기 위해 동일한 길이의 목록에서 사용할 수있는 발전기 /입니다
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) 
-3

:

len(x)==len(y) and all(x[i] == y[i] for i in range(len(x)-1)) 
+0

파이썬의 목록을'=='(나는 2.4.3에서 테스트 한 것뿐입니다)로 비교할 수 있지만 순서는 동일해야합니다. 또한'range (len (x) -1)'는'range (x)'='[0,1,2, ..., x-1]'처럼리스트의 마지막 요소를 비교하지 않을 것이다. 이것은 또한 목록이 본질적으로 순서대로 표시되는 것처럼 의미가 있지만 목록을 찾는 순서는 같지 않은 목록을 동일시합니다. –