파이썬에서 리스트는 중첩될 수 있습니다. 즉, 리스트의 요소가 또 다른 리스트일 수 있죠. 이 글에서는 리스트 안에 포함된 여러 하위 리스트에서 양수(positive number)만 골라내는 방법을 알아보겠습니다. 최종 결과는 양수만 담고 있는 새로운 중첩 리스트 형태로 반환됩니다.
방법 1: for-in 문과 리스트 컴프리헨션 활용
가장 간결한 방법은 리스트 컴프리헨션(list comprehension)을 사용하는 것입니다. 내부 반복문에서 각 요소가 0보다 큰지 비교 연산자로 검사하고, 조건을 만족하는 값만 새로운 리스트에 담습니다. 바깥쪽 반복문이 각 하위 리스트를 처리하여 최종적으로 리스트의 리스트 형태로 결과를 만들어냅니다.
예제 코드
listA = [[-9, -1, 3], [11, -8, -4, 434, 0]]
# 주어진 리스트
print("Given List :\n", listA)
# 양수 요소 찾기
res = [[y for y in x if y > 0] for x in listA]
# 결과 출력
print("List of positive numbers :", res)실행 결과
위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.
Given List : [[-9, -1, 3], [11, -8, -4, 434, 0]] List of positive numbers : [[3], [11, 434]]
첫 번째 하위 리스트 [-9, -1, 3]에서는 3만, 두 번째 하위 리스트 [11, -8, -4, 434, 0]에서는 11과 434가 추출된 것을 확인할 수 있습니다. 참고로 0은 양수가 아니므로 결과에 포함되지 않습니다.
방법 2: append() 메서드 활용
append() 함수는 컨테이너에 요소를 계속 추가할 때 사용합니다. 이 방법에서는 중첩 for 루프를 설계하는데, 내부 반복문에서 각 요소의 값이 양수인지 검사한 후 임시 리스트에 추가하고, 바깥쪽 반복문이 각 하위 리스트를 순회하며 결과 리스트에 저장합니다.
예제 코드
listA = [[-9, -1, 3], [11, -8, -4, 434, 0]]
# 주어진 리스트
print("Given List :\n", listA)
res = []
# append 활용
for elem in listA:
temp = []
for i in elem:
if i > 0:
temp.append(i)
res.append(temp)
# 결과 출력
print("List of positive numbers :", res)실행 결과
위 코드를 실행하면 동일한 결과를 얻을 수 있습니다.
Given List : [[-9, -1, 3], [11, -8, -4, 434, 0]] List of positive numbers : [[3], [11, 434]]
두 방법의 비교
리스트 컴프리헨션 방식은 코드가 한 줄로 간결하고 파이썬다운(Pythonic) 스타일이라 가독성이 좋습니다. 반면 append()를 사용한 방식은 로직이 단계별로 명확하게 드러나기 때문에 초보자가 흐름을 이해하기 쉽고, 조건이 복잡해질 때 확장하기도 용이합니다. 상황에 맞게 두 방식 중 적절한 것을 선택해 사용하면 됩니다.