2014-03-04 5 views
4

나는 처음에 0Pythonic 2d 배열을 만드는 방법?

이 내가 그것을 할 생각 어떻게 설정 정수 값의 2 차원 배열을 만들려면 :

grid = [[0] * width] * height 

을하지만 이것은 단지 원본에 대한 참조로 각 행을 생성 그래서 같은 것을하는 것

grid[0][1] = 1 

값은 모든 그리드 [n] [1] 값을 수정합니다.

grid = [[0 for x in range(width)] for y in range(height)] 

그것은 잘못된 느낌이 할 수있는 더 좋은 더 파이썬 방법이 :

이 내 솔루션입니다?

EDIT : 격자 크기가 절대 변경되지 않고 튜플 또는 array.array와 같은 것을 사용해야하는 경우 보너스 질문이 필요합니까?

답변

4

Since numbers are immutable, using * to create a list should be fine. 그래서, 2D 목록 초기화이

[[0] * width for y in range(height)] 
+0

왜'[0] * 폭 * 하나만리스트 '[0] * 폭]'만들 것이다 – zeffii

+1

@zeffii은 (l1' '로 생각할) height' 만들 목록 그것들은 모두'l1 '에 대한 참조 인'height' 요소를 가지고 있습니다. 따라서 모든 목록을 변경하면 다른 모든 목록에도 반영됩니다. – thefourtheye

+0

우수, 감사합니다! – zeffii

1

같이 수행 할 수 있습니다 당신은 numpy.zeros을 사용할 수

import numpy as np 
numpy.zeros(height, width) 

를이 옵션 dtype=numpy.int8

+0

그래, 이전에 numpy로 해봤지만 현재 프로젝트의 외부 의존성을 피하려고합니다. – Igglyboo

0

로 정수를 사용해야하는 경우 여기 내가 사용하는 것입니다.

def generate_board(n): #Randomly creates a list with n lists in it, and n random numbers 
         #in each mini list 
    list = [] 
    for i in range(0, n): 
     list.append([]) 
     for j in range(0, n): 
      list[i].append(random.randint(0, 9)) 
    return list 

def print_board(board): 
    n = len(board) - 1 
    while n > -1: 
     print str(board[n]) + ' = ' + str(n) 
     n -= 1 
관련 문제