강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

강신님의 프로필 이미지
강신

작성한 질문수

파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)

14. 인접행렬

그래프 형태 질문드립니다.

작성

·

326

1

g=[[0]*(N) for _ in range(N)] 형태와

g = [[0]*N]*N 형태가 다른가요?  처음 만들때 print를 해보면 형태가 같게 나오지만 각각의 자리에 가중치를 넣으면 형태가 다르게 나와 질문 드립니다.

import sys
sys.stdin =
open("input.txt", "rt")

N
, M = map(int, input().split())
a = [
list(map(int, input().split())) for _ in range(M)]

mat = [[
0]*N]*N
g = [[
0]*N for _ in range(N)]

print(mat)
print(g)

for r,c,l in a:
g[r-
1][c-1] = l
mat[r-
1][c-1] = l




for i in range(N):
for j in range(N):
print(mat[i][j], end=' ')
print()
print("=======================")

for i in range(N):
for j in range(N):
print(g[i][j], end=' ')
print()

[[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]] [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]] 2 2 5 5 5 0 2 2 5 5 5 0 2 2 5 5 5 0 2 2 5 5 5 0 2 2 5 5 5 0 2 2 5 5 5 0 ======================= 0 7 4 0 0 0 2 0 5 0 5 0 0 0 0 5 0 0 0 2 0 0 5 0 0 0 0 0 0 0 0 0 0 5 0 0

답변 1

2

김태원님의 프로필 이미지
김태원
지식공유자

이차원 리스트 생성은 g=[[0]*(N) for _ in range(N)] 와 같이 생성해야 합니다.

g = [[0]*N]*N 같이 생성하면 모양은 비슷하지만 동일한 1차원 리스트를 여러번 복사했을 뿐이라고 알고있습니다.

즉 g[0][0]=7 값을 넣으면 복사된 모든 1차원 리스트의 0번 인덱스가 다 7이 됩니다.

g = [[0]*3]*3

g[0][0]=7

print(g) 

를 실행해 보세요.

[[7, 0, 0], [7, 0, 0], [7, 0, 0]] 와 같이 출력됩니다.  저도 자세한 건 모릅니다. 

강신님의 프로필 이미지
강신

작성한 질문수

질문하기