[Python 정리] for문에서 이전 요소를 다음 요소에 덮어씌우는 방법?◎ Python/알게된 것 정리2023. 6. 9. 18:35
Table of Contents
반응형
코드를 짜다가 리스트에서 맨 뒤의 요소부터 바로 앞의 요소로 덮어씌워야 하는 일이 생겼다.
가장 먼저 생각할 수 있는 방법은 인덱싱을 이용하는 것이다.
# 간단하게 좌표라고 생각
class Pair:
def __init__(self, x, y) -> None:
self.x = x
self.y = y
def __repr__(self) -> str:
return f"({self.x}, {self.y})"
# 좌표들을 저장할 리스트 생성
list_pair = []
# (0, 0), (1, 1) 등등 좌표 생성
for i in range(5, 0, -1):
tmp = Pair(i, i)
list_pair.append(tmp)
print(f"이전 : {list_pair}")
# 맨 뒤의 요소부터 그 앞의 요소로 덮어씌움
for i in range(len(list_pair) - 1, 0, -1):
list_pair[i].x = list_pair[i - 1].x
list_pair[i].y = list_pair[i - 1].y
print(f"이후 : {list_pair}")
>>>
이전 : [(5, 5), (4, 4), (3, 3), (2, 2), (1, 1)]
이후 : [(5, 5), (5, 5), (4, 4), (3, 3), (2, 2)]
당연하게 맨 뒤에서부터 시작해서 1이 2로, 2가 3으로, 3이 4로 바뀌면서 첫 번째 요소는 바뀌지 않았다.
그런데 이걸 인덱싱을 하지 않고 구현할 수 있는 방법이 있을까.. 굳이 필요한가 싶겠지만 zip을 이용해 구현해보았다.
어느 면에서는 인덱싱보다 나을 수도..?
# 간단하게 좌표라고 생각
class Pair:
def __init__(self, x, y) -> None:
self.x = x
self.y = y
def __repr__(self) -> str:
return f"({self.x}, {self.y})"
# 좌표들을 저장할 리스트 생성
list_pair = []
# (0, 0), (1, 1) 등등 좌표 생성
for i in range(5, 0, -1):
tmp = Pair(i, i)
list_pair.append(tmp)
print(f"이전 : {list_pair}")
# 맨 뒤의 요소부터 그 앞의 요소로 덮어씌움
for cur, next in zip(list_pair[::-1], list_pair[-2::-1]):
cur.x = next.x
cur.y = next.y
print(f"이후 : {list_pair}")
>>>
이전 : [(5, 5), (4, 4), (3, 3), (2, 2), (1, 1)]
이후 : [(5, 5), (5, 5), (4, 4), (3, 3), (2, 2)]
이해만 한다면 알아보기는 더 쉬운 것 같다.
간단하게 핵심만 짚어 보자.
# 맨 뒤의 요소부터 그 앞의 요소로 덮어씌움
for cur, next in zip(list_pair[::-1], list_pair[-2::-1]):
cur.x = next.x
cur.y = next.y
zip 내장함수를 이용해 두 개의 리스트를 인수로 주었다. list_pair[::-1]은 리스트를 거꾸로 만드는 것이고, list_pair[-2::-1]은 뒤에서 2번째 값까지 자른 후, 즉 맨 뒤 요소를 자른 후 리스트를 거꾸로 만드는 것이다.
즉 아래와 같다.
list_pair[::-1] 은 [(1, 1), (2, 2), (3, 3), (4, 4), (5, 5)]
list_pair[-2::-1] 은 [(2, 2), (3, 3), (4, 4), (5, 5)]
반응형
'◎ Python > 알게된 것 정리' 카테고리의 다른 글
[미립자 팁] 틀린 값을 입력받으면 맞을 때까지 반복할 때 방법 (0) | 2023.12.12 |
---|---|
[Pandas] 특정한 값을 만족하는 행의 개수 세기 (0) | 2023.10.04 |
[Python 정리] 리스트에서 평균과 가장 가까운 값의 인덱스를 찾는 법? (lambda 식 사용법) (1) | 2023.03.17 |
[Python 정리] 내장함수 zip, filter에 대하여 (0) | 2022.09.26 |
[Python 정리] if __name__ == "__main__": 의 의미, 활용법 (2) | 2022.09.24 |
@Reo :: 코드 아카이브
자기계발 블로그