리스트에서 특정 자릿수(digit)만으로 구성된 숫자만 골라내야 하는 경우, 리스트 컴프리헨션(list comprehension)과 'all' 연산자를 조합하면 매우 간결하게 해결할 수 있습니다. 별도의 복잡한 반복문 없이 한 줄의 코드로 조건에 맞는 요소만 필터링할 수 있다는 것이 이 방법의 가장 큰 장점입니다.
아래는 실제 동작 예시입니다.
예제 코드
my_list = [3345, 2345, 1698, 2475, 1932]
print("The list is :")
print(my_list)
digit_list = [2, 3, 5, 4]
my_result = [index for index in my_list if all(int(element) in digit_list for element in str(index))]
print("The result is :")
print(my_result)실행 결과
The list is : [3345, 2345, 1698, 2475, 1932] The result is : [3345, 2345]
코드 설명
먼저 숫자로 이루어진 리스트를 정의하고, 콘솔에 그대로 출력합니다.
다음으로, 허용할 자릿수를 담고 있는 정수형 리스트(
digit_list)를 정의합니다. 위 예제에서는 2, 3, 5, 4만 허용됩니다.리스트 컴프리헨션을 사용하여 원본 리스트의 각 요소를 순회하며, 각 숫자를 문자열(
str(index))로 변환한 뒤 한 글자씩 잘라냅니다.잘라낸 각 문자를 다시 정수(
int(element))로 변환하여digit_list에 포함되어 있는지 검사합니다.'all' 연산자는 모든 자릿수가 조건을 충족할 때만
True를 반환하므로, 하나라도 허용되지 않은 자릿수가 들어 있으면 해당 숫자는 결과에서 제외됩니다. 예를 들어 1698은 1과 9, 6이 목록에 없기 때문에 걸러집니다.조건을 통과한 숫자들만 모아 새로운 리스트를 생성하고 변수에 할당한 후, 최종 결과를 콘솔에 출력합니다.
핵심 포인트 정리
str()로 숫자를 문자열화하면 각 자릿수에 개별 접근할 수 있어 자릿수 단위 검사가 쉬워집니다.all()제너레이터 표현식을 활용하면 중첩 반복문 없이도 "모든 요소가 조건을 만족하는지"를 선언적으로 표현할 수 있습니다.이 패턴은 전화번호 필터링, 유효 자릿수 검증 등 다양한 데이터 전처리 작업에 응용할 수 있습니다.