주어진 리스트의 원소들을 뒤집는 프로그램을 for으로 작성할 때 다음과 같이 하면,
|
1
2
3
4
5
6
|
numbers = [2, 3, 5, 7, 11, 13, 17, 19]
for i in range(len(numbers)) :
numbers[i] = numbers[len(numbers) - i - 1]
print(numbers)
|
cs |
아래의 결과와 같이 원래의 리스트에서 대칭인 리스트가 출력이 된다.

그 이유는, numbers[4]부터는 number[3]을 불러와 값을 대체 할 때 이미 numbers[4]로 대체된 numbers[3]을 다시 불러와 대체하기 때문이다. 즉, 바뀐 것을 다시 불러오는 것이니 대칭이 되는 것이다. 이를 해결하기 위해서는,
|
1
2
3
4
5
6
7
8
9
10
11
12
|
numbers = [2, 3, 5, 7, 11, 13, 17, 19]
for left in range(len(numbers) // 2):
# 인덱스 left와 대칭인 인덱스 right 계산
right = len(numbers) - left - 1
# 위치 바꾸기
temp = numbers[left]
numbers[left] = numbers[right]
numbers[right] = temp
print((numbers))
|
cs |
위와 같이 거의 모든 것을 수정해야 하는데, 우선 기본적인 아이디어는 '원래의 리스트를 반으로 쪼개 서로 바꿔주면 된다' 이다. 그래서 리스트의 총 길이가 짝수이든 홀수이든 관계 없이 리스트의 총 길이를 2로 나누어 몫만을 취해 그것의 크기 만큼 절반으로 나눠주는데, 그 이유는 리스트의 총 길이가 홀수인 경우에도 가장 중간의 원소는 결국 자리가 바뀌지 않기 때문에 짝수인 경우와 같은 취급을 해줘도 되기 때문이다.
아무튼 그렇게 설정하고, 인덱스를 left, right로 나누어 준다. 그다음 중요한 부분은 left에 해당하는 인덱스 위치의 리스트 원소들을 임시로 저장할 변수 'temp'를 설정해 주는 것이다. 그렇게 해야 위에 잘못 짠 코드와 같은 실수를 하지 않을 수 있다. 변수 'temp'를 사용하지 않고,
numbers[left] = numbers[right]
numbers[right] = numbers[left]
로 코드를 짤 경우 위의 경우와 같이 대칭인 리스트를 산출하게 된다. 위의 경우 보다 잘못된 코드임을 더 명확하게 알아볼 수는 있지만, 어쨌든 같은 결과다.
'배운 것 > Python' 카테고리의 다른 글
| [기초 문법] 팰린드롬 확인하기 (for 문, list) (0) | 2022.01.21 |
|---|---|
| [기초 문법] a부터 b까지 정수의 합 구하기(for 문) (0) | 2022.01.11 |
| [기초 문법] 함수 속 변수 정의 (0) | 2022.01.07 |
| [기초 문법] 중첩 while 문 (구구단 출력) (0) | 2022.01.04 |
| [기초 문법] 피보나치 수열(임시 저장소 'temp' 변수 설정) (0) | 2022.01.04 |