• Home
  • About
    • 검은색 잉크 블로그 photo

      검은색 잉크 블로그

      github GIST → https://gist.github.com/BlaCkinkGJ입니다.

    • Learn More
    • Email
    • Github
  • Posts
    • All Posts
    • All Tags
  • Projects

[파이썬] 2차원 리스트의 for문 접근

26 May 2018

Reading time ~1 minute

2차원 배열의 for문 접근

주의 ! 이 문서는 파이썬 2.x 버전을 기준으로 작성되었습니다.

python에서 2차원 리스트를 다루는 것은 Numpy를 사용하지 않는다고 가정하는 경우 다른 언어에 비해 쉽다고 말하기는 어렵습니다.

이를 테면, A = [[1, 2, 3], [4, 5, 6, 7]]이라는 2차원 리스트가 있다고 생각하는 경우, 이 값을 접근을 하는 데 있어서 가장 쉬운 방법은 아래와 같은 방법으로 접근하는 것이라 할 수 있습니다.

for i in A:
	for j in i:
		print j,

이 경우 출력은

1 2 3 4 5 6 7

로 나오게 됩니다.

하지만 저 방식을 통해서는 A의 원소의 값을 가져올 수는 있지만 수정을 할 수 없다는 단점이 있습니다.

그렇다면, 값을 변경을 하고 싶을 때의 접근 방법은 어떻게 하는 것이 좋을까? 첫 번째는 len을 사용해서 푸는 방법 입니다. len을 사용해서 먼저 A 안에 존재하는 리스트의 갯수를 구한 후에 그 값을 바탕으로 각각의 리스트에 접근을 하는 방법이 있습니다. 아래와 같은 방식으로 구현이 될 수 있습니다.

for i in xrange(len(A)):
	for j in xrange(len(A[i])):
		A[i][j] = 1

print A

이렇게 A 값의 수정을 하여 아래와 같은 결론이 나오게 됩니다.

[[1, 1, 1], [1, 1, 1, 1]]

하지만 위의 코드는 조금 지저분 하고, 명확히 그 내용을 알기가 어렵습니다. 그래서 제가 추천하는 방식은 아래와 같습니다.

for idx_i, val_i in enumerate(A):
	for idx_j, val_j in enumerate(val_i):
		print val_j,
		A[idx_i][idx_j] = 1
print A

이렇게 enumerate를 사용하면 가독성이 좀 더 향상되면서 인덱스와 값이 나누어지게 되어, 불필요한 A값의 변경을 막습니다. 그리고 이와 동시에 원하는 경우 값의 수정도 진행을 할 수 있게 됩니다. 저 프로그램을 실행하면 아래와 같은 결론이 나오게 됩니다.

1 2 3 4 5 6 7
[[1, 1, 1], [1, 1, 1, 1]]

물론 이 방식은 제가 선호하는 방식이기는 하지만 원하시면 이 외에도 다양한 방법이 파이썬에는 존재합니다.

결과적으로, 파이썬에는 사실 하나의 단순 작업 처리에도 매우 다양한 방법이 존재하기 때문에 본인에 가장 맞는 방법 하나를 본인의 것으로 하시면 됩니다.



python Share Tweet +1