배열의 원소 삭제하기
문제 설명
정수 배열 arr과 delete_list가 있습니다. arr의 원소 중 delete_list의 원소를 모두 삭제하고 남은 원소들은 기존의 arr에 있던 순서를 유지한 배열을 return 하는 solution 함수를 작성해 주세요.
제한사항
1 ≤ arr의 길이 ≤ 100
1 ≤ arr의 원소 ≤ 1,000
arr의 원소는 모두 서로 다릅니다.
1 ≤ delete_list의 길이 ≤ 100
1 ≤ delete_list의 원소 ≤ 1,000
delete_list의 원소는 모두 서로 다릅니다.
입출력 예
문제 풀이
def solution(arr, delete_list):
answer = [item for item in arr if item not in delete_list]
return answer
• 'item for item in arr' : 'arr' 리스트의 각 원소에 대해 반복을 수행합니다. 각 원소는 'item' 변수에 할당됩니다.
• 'if item not in delete_list' : 조건문입니다. 'item'이 'delete_list'에 포함되지 않는 경우에만 아래의 명령을 수행합니다.
• '[...]' : 리스트 컴프리헨션의 결과는 새로운 리스트로 반환됩니다.
• 따라서, 해당 코드는 'arr' 리스트의 원소 중 'delete_list'에 포함되지 않은 원소만을 선택하여 새로운 리스트를 생성하게 됩니다.
리스트 컴프리헨션(list comprehension)
리스트 컴프리헨션은 리스트를 생성하는 간결하고 읽기 쉬운 방법입니다.
Python에서 매우 특징적이고 유용한 기능 중 하나로, 기본 반복문보다 간단하게 리스트를 생성할 수 있습니다.
기본 형식
[expression for item in iterable if condition]
1. expression: 현재의 'item'에 대한 표현식입니다.
2. iterable: 순회 가능한 객체입니다 (예: 리스트, 튜플, 문자열 등).
3. condition: (optional)리스트에 포함될 아이템을 필터링 하는 조건입니다.
예제
1. 0부터 9까지의 숫자로 구성된 리스트 생성:
numbers = [x for x in range(10)] print(numbers) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
2. 0부터 9까지의 숫자 중 짝수만으로 구성된 리스트 생성:
evens = [x for x in range(10) if x % 2 == 0] print(evens) # [0, 2, 4, 6, 8]
3. 각 숫자를 제곱한 값으로 구성된 리스트 생성:
squares = [x*x for x in range(10)] print(squares) # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
특징
• 간결함: 일반적인 'for' 루프를 사용한 리스트 생성보다 코드가 간결합니다.
• 표현력: 조건과 표현식을 조합하여 다양한 리스트를 쉽게 생성할 수 있습니다.
추가적인 정보
리스트 컴프리헨션은 'list'만 생성하는 것이 아닙니다.
'set'과 'dictionary'에 대한 컴프리헨션도 있습니다.
Set 컴프리헨션unique_evens = {x for x in range(10) if x % 2 == 0}
Dictionary 컴프리헨션
squares_dict = {x: x*x for x in range(5)} print(squares_dict) # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
하지만, 리스트 컴프리헨션은 복잡한 로직을 구현하기 위해 너무 과도하게 사용될 경우 코드의 가독성을 저해할 수 있으므로 적절하게 사용하는 것이 중요합니다.