2012-11-10 4 views
-1

suduko 프로젝트를 시작한 결과 "board"목록의 모든 0을 ""로 바꿔야합니다. 왜 작동하지 않습니까?목록의 문자를 바꿉니다

내가이 오류 :

AttributeError: 'list' object has no attribute 'replace' 

내 코드 :

In [10]: board 
Out[10]: 
[[3, 7, 0, 0, 5, 0, 0, 0, 0], 
[0, 6, 0, 0, 3, 0, 2, 0, 0], 
[0, 2, 9, 4, 0, 0, 0, 7, 8], 
[0, 0, 4, 1, 7, 0, 0, 8, 0], 
[0, 0, 6, 3, 0, 5, 9, 0, 0], 
[0, 5, 0, 0, 8, 4, 1, 0, 0], 
[7, 1, 0, 0, 0, 8, 5, 6, 0], 
[0, 0, 5, 0, 1, 0, 0, 2, 0], 
[0, 0, 0, 0, 9, 0, 0, 1, 3]] 

In [11]: board=[[x if x!=0 else " " for x in i] for i in board] 

In [12]: board 
Out[12]: 
[[3, 7, ' ', ' ', 5, ' ', ' ', ' ', ' '], 
[' ', 6, ' ', ' ', 3, ' ', 2, ' ', ' '], 
[' ', 2, 9, 4, ' ', ' ', ' ', 7, 8], 
[' ', ' ', 4, 1, 7, ' ', ' ', 8, ' '], 
[' ', ' ', 6, 3, ' ', 5, 9, ' ', ' '], 
[' ', 5, ' ', ' ', 8, 4, 1, ' ', ' '], 
[7, 1, ' ', ' ', ' ', 8, 5, 6, ' '], 
[' ', ' ', 5, ' ', 1, ' ', ' ', 2, ' '], 
[' ', ' ', ' ', ' ', 9, ' ', ' ', 1, 3]] 
+3

심지어 오류가 명확하게 말합니다 :'list에는 replace라는 속성이 없습니다 .', replace()는 문자열이 아닌 목록입니다. –

+0

'replace'는 문자열 메소드입니다. 그래서리스트에는 그 메소드가 없습니다. 목록 이해력이나지도가 필요할 것입니다. –

+0

죄송합니다. 대체 할 다른 방법이 있습니까? – user1562379

답변

2

이런 식으로 뭔가가, 지능형리스트를 사용하려고 :

board = [[3,7,0,0,5,0,0,0,0], 
     [0,6,0,0,3,0,2,0,0], 
     [0,2,9,4,0,0,0,7,8], 
     [0,0,4,1,7,0,0,8,0], 
     [0,0,6,3,0,5,9,0,0], 
     [0,5,0,0,8,4,1,0,0], 
     [7,1,0,0,0,8,5,6,0], 
     [0,0,5,0,1,0,0,2,0], 
     [0,0,0,0,9,0,0,1,3]] 

board = [[x if x else ' ' for x in line] for line in board] 

board = [[3,7,' ',' ',5,' ',' ',' ',' '], 
     [' ',6,' ',' ',3,' ',2,' ',' '], 
     [' ',2,9,4,' ',' ',' ',7,8], 
     [' ',' ',4,1,7,' ',' ',8,' '], 
     [' ',' ',6,3,' ',5,9,' ',' '], 
     [' ',5,' ',' ',8,4,1,' ',' '], 
     [7,1,' ',' ',' ',8,5,6,' '], 
     [' ',' ',5,' ',1,' ',' ',2,' '], 
     [' ',' ',' ',' ',9,' ',' ',1,3]] 

또는 map() : map(lambda line: [x if x else ' ' for x in line], board)을 사용할 수 있습니다.

+0

할 수 있습니다 'board in line for board]'[[ "x in line for x for line]"? – user1562379

+0

@ user1562379 아니, 틀렸어. 내 대답에 무슨 문제가 있니? –

+0

잘못은 아니지만, 파이썬에게 그대로 num을 남기라는 것은 쓸모없는 것처럼 보입니다. 그래서 나는 그에게 num을 내가 변경할 수 있다고 생각할 수 있다고 생각했다. – user1562379

1

당신은 지능형리스트를 사용할 수 있습니다

board = [[3,7,0,0,5,0,0,0,0], 
     [0,6,0,0,3,0,2,0,0], 
     [0,2,9,4,0,0,0,7,8], 
     [0,0,4,1,7,0,0,8,0], 
     [0,0,6,3,0,5,9,0,0], 
     [0,5,0,0,8,4,1,0,0], 
     [7,1,0,0,0,8,5,6,0], 
     [0,0,5,0,1,0,0,2,0], 
     [0,0,0,0,9,0,0,1,3]] 

def print_board(board): 
    pass 
    a=-1 
    board=board.replace(0, " ") 
    for i in board: 
     a+=1 

     if a%3==0: 

      print 25*"*"+"" 
      print "*",i[0],i[1],i[2],"*",i[3],i[4],i[5],"*",i[6],i[7],i[8],"*" 

     else: 
      print "*",i[0],i[1],i[2],"*",i[3],i[4],i[5],"*",i[6],i[7],i[8],"*" 
    print 25*"*"+"" 
+0

은 변경 용어 만 사용할 수 있습니까? – user1562379

관련 문제