2013-09-20 2 views
0
def sqrs(seq): 
    boxes = [[] for x in range(0,9)] 
    j = 0 
    for y in range(0, 7, 3): 
    for x in range(0, 7, 3): 
     for i in range(0, 3): 
     boxes[j].extend(seq[y + i][x:x + 3]) 
     j += 1 
    return boxes 

이 함수는 9x9 스도쿠 솔루션 목록을 실행하고 각 3x3 상자를 다른 목록 목록으로 전송합니다. 그것은 일을하지만 꽤 못생긴 것처럼 보입니다. 누구든지이 일을하는 더 매끄러운 방법을 알고 있습니까?스도쿠 솔루션 목록에서 목록 추출 상자

아니요, 사용하지 못합니다. :

답변

1

li이 정의되어 있지 않으므로 예제가 실행되지 않지만 내가하려는 일을 이해하고 각 상자의 숫자 목록 순서에 신경 쓰지 않는다면, 다음이 작동 -.. 당신이 야바위꾼 여부를 생각하면 그것은 당신에게 달려 최고

def sqrs(seq): 
    indices = [(x % 3, x/3) for x in range(0, 9)] # Set up a list of coordinates 
    boxes = [[seq[x*3+xx][y*3+yy] for xx, yy in indices] for x, y in indices] # Use the list of coordinates both to reference the boxes and to reference the cells within the box, to reorganize the list. 
    return boxes 
+0

을, 정말 감사합니다 나는 for''와리스트의 목록을 얻을 수있는 방법이 있었다 알았지 만 난 그냥 '나오지 않았어 – chrissphinx

+0

좌표 목록을 설정하는 대신'int (x/3)'를 사용해야합니까? – chrissphinx

+0

@chrissphinx @ 2. Python 2.x 또는 Python을 사용하는지 여부에 따라 다릅니다. 3.x. 파이썬 2.x에서, 정수로 나눈 정수는 항상 정수를 반환합니다. 파이썬 3.x에서는, 나누기 연산자는 항상 부동 소수점을 반환합니다. 만약 당신이 파이썬 3.x에서, 그렇다면 당신은'int (x/3)'를 사용할 필요가 있습니다. – Brionius