본문 바로가기
● 알고리즘, 자료구조/2021 알고리즘

리스트 함수를 활용하여 차례대로 수정하기

by 0ver-grow 2021. 5. 28.
반응형

막힌 상황 : 3번째 출력에서 홀수 7이 들어있다.

# 빈 리스트 만들기
numbers = []
print(numbers)

# numbers에 값들 추가
numbers = [1, 7, 3, 6, 5, 2, 13, 14]
print(numbers)

# numbers에서 홀수 제거
index = 0
while index < len(numbers) :
    if numbers[index] % 2 != 0 :  # 홀수라면
        del numbers[index]
    index += 1
print(numbers)  # 출력 결과물에 유일하게 홀수 7이 들어있다. [7, 6, 2, 14]

# numbers의 인덱스 0 자리에 20이라는 값 삽입
numbers.insert(0, 20)
print(numbers)

# numbers를 정렬해서 출력
numbers.sort()
print(numbers)

원인 발견

while index < len(numbers) :
    if numbers[index] % 2 != 0 :  # 홀수라면
        del numbers[index]  # 삭제
    index += 1

먼저 수정전 인덱스 0과 1의 값은 1, 7이다.

인덱스 0의 값 1은 홀수이므로 del 되고

이 인덱스 0의 빈자리를 인덱스 1의 값 7이 대신하게 된다.

그런데, index의 값은 += 1이 되므로

값 7은 비교 대상에서 제외되므로 삭제되지 않은 것이다.

 

해결 : continue를 쓰면 된다.

while index < len(numbers) :
    if numbers[index] % 2 != 0 :  # 홀수라면
        del numbers[index]  # 삭제
        continue
    index += 1

 

 

모범답안

# 빈 리스트 만들기
numbers = []
print(numbers)

# numbers에 값들 추가
numbers.append(1)
numbers.append(7)
numbers.append(3)
numbers.append(6)
numbers.append(5)
numbers.append(2)
numbers.append(13)
numbers.append(14)
print(numbers)

# numbers에서 홀수 제거
i = 0
while i < len(numbers):
    if numbers[i] % 2 == 1:
        del numbers[i]
    else:
        i += 1
print(numbers)

# numbers의 인덱스 0 자리에 20이라는 값 삽입
numbers.insert(0, 20)
print(numbers)

# numbers를 정렬해서 출력
numbers.sort()
print(numbers)
반응형