중첩 리스트에서 모든 요소가 K의 배수인 행(하위 리스트)만 골라내야 하는 경우가 있습니다. 이럴 때 리스트 컴프리헨션(list comprehension)과 나머지 연산자(%)를 함께 사용하면 코드 한 줄로 간결하게 해결할 수 있습니다.
핵심 아이디어
각 행을 순회하면서 행 안의 모든 요소를 K로 나눈 나머지가 0인지 검사합니다. 이때 파이썬 내장 함수 all()을 사용하면 행 전체가 조건을 만족하는지 한 번에 확인할 수 있습니다. 하나라도 조건을 만족하지 않는 요소가 있으면 그 행은 결과에서 제외됩니다.
예제 코드
my_list = [[15, 10, 25], [14, 28, 23], [120, 55], [55, 30, 203]]
print("The list is :")
print(my_list)
K = 5
print("The value of K is ")
print(K)
my_result = [index for index in my_list if all(element % K == 0 for element in index)]
print("The result is :")
print(my_result)실행 결과
The list is : [[15, 10, 25], [14, 28, 23], [120, 55], [55, 30, 203]] The value of K is 5 The result is : [[15, 10, 25], [120, 55]]
코드 설명
리스트 안에 리스트가 중첩된 구조를 정의한 뒤 콘솔에 출력합니다.
기준이 되는 K 값(여기서는 5)을 정의하고 콘솔에 출력합니다.
리스트 컴프리헨션으로 바깥 리스트를 순회하며, 각 요소를 K로 나눈 나머지(
% K)가 0인지 비교합니다.all()함수를 사용해 해당 행의 모든 요소가 조건을 통과하는지 검사합니다.조건 결과가
True인 행만 결과 변수my_result에 저장됩니다.최종 필터링된 결과가 콘솔에 출력됩니다.
참고 사항
위 예제에서 두 번째 행 [14, 28, 23]은 14와 23이 5의 배수가 아니므로 제외되었고, 네 번째 행 [55, 30, 203] 역시 203이 5의 배수가 아니어서 제외되었습니다. 반면 [15, 10, 25]와 [120, 55]는 모든 요소가 5로 나누어떨어지므로 결과에 포함됩니다.
만약 조건을 만족하는 행이 하나라도 있으면 되는 경우라면 all() 대신 any() 함수로 바꿔주기만 하면 됩니다. 이처럼 리스트 컴프리헨션과 내장 함수를 조합하면 다양한 필터링 로직을 유연하게 구현할 수 있습니다.