파이썬 이차원 리스트 문제 (feat. reverse, reversed의 차이)
초보자를 위한 파이썬 300제 문제 풀이입니다. 문제를 푸실 분들은 아래 링크에서 문제 먼저 푸시기 바랍니다.
181 ~ 190
.answer {margin-top: 10px;margin-bottom: 50px;padding-top: 10px;border-top: 3px solid LightGray ...
wikidocs.net
이차원 리스트를 뒤에서부터 순서대로 출력하는 문제. 문제를 풀면서 reverse와 reversed의 차이도 확인하고 가자.
우선 문제는 아래와 같다.
# 186
# 리스트에 저장된 데이터를 아래와 같이 출력하라.
# apart = [ [101, 102], [201, 202], [301, 302] ]
# 301 호
# 302 호
# 201 호
# 202 호
# 101 호
# 102 호
리스트 안에 리스트로 묶인 원소들이 들어가 있는 형태를 이차원 리스트라고 한다. 일단 리스트를 두번 돌려야 그 안의 원소를 하나씩 출력할 수 있다. 다중 반복문의 형태로 for문 안에 for문이 있는 형태만 될 것 같다. 그래서 내가 생각한 풀이는 reverse()를 생각하는 풀이였다. 그래서 처음 작성한 코드는,
apart = [ [101, 102], [201, 202], [301, 302] ]
for row in apart.reverse():
for col in row:
print(col, "호")
>>> TypeError: 'NoneType' object is not iterable
TypeError: 'NoneType' object is not iterable
이렇게 에러가 뜬다. 그래서 다시 생각한 방법은,
apart = [ [101, 102], [201, 202], [301, 302] ]
apart.reverse()
for row in apart:
for col in row:
print(col, "호")
>>> 301 호
>>> 302 호
>>> 201 호
>>> 202 호
>>> 101 호
>>> 102 호
이렇게 for문 밖에서 메소드를 쓰고 for문을 돌리면 된다. 왜 이럴까???
reverse()는 리스트의 값을 뒤집어 주지만 값을 반환하지 않고, reversed()는 리스트이 값을 뒤집으면서 값을 반환한다. 그래서 아래와 같이 for문에 reversed()를 쓰면 정상적으로 출력된다. 더 깊은 내용은 구글링해보면 된다.
apart = [ [101, 102], [201, 202], [301, 302] ]
for row in reversed(apart):
for col in row:
print(col, "호")
>>> 301 호
>>> 302 호
>>> 201 호
>>> 202 호
>>> 101 호
>>> 102 호
reverse()와 같은 리스트 메소드는 sort(reverse=True)를 사용하면 된다. sort()가 리스트 안의 원소를 정렬하는 건데, 이것을 거꾸로 정렬한다고 보면 된다.
apart = [ [101, 102], [201, 202], [301, 302] ]
apart.sort(reverse=True)
for row in apart:
for col in row:
print(col, "호")
>>> 301 호
>>> 302 호
>>> 201 호
>>> 202 호
>>> 101 호
>>> 102 호
답지는 아래와 같이 리스트 슬라이싱을 써서 풀었다. 슬라이싱은 [start : end : step] 순인데, step을 -1을 줘서 뒤에서부터 나오게했다. 코드가 짧고 직관적이니, 이게 가장 정답이 아닐까 싶다.
for row in apart[::-1]:
for col in row:
print(col, "호")
>>> 302 호
>>> 301 호
>>> 202 호
>>> 201 호
>>> 102 호
>>> 101 호
한 문제에도 여러가지 풀이가 나오는 재미가 있다. 다시 공부하러.
'파이썬 테스트 [Python]' 카테고리의 다른 글
파이썬 tuple형태 반환 (feat. enumerate()) (36) | 2022.01.18 |
---|---|
파이썬 주민등록번호 유효성 검사 (27) | 2022.01.07 |
파이썬 턴제(Turn-based Strategy) 게임 (4) | 2021.12.22 |
파이썬 베스킨라빈스 31게임 (12) | 2021.12.21 |
파이썬 숫자 맞추기 게임(업다운 게임) (18) | 2021.12.20 |
댓글