리스트에 포함된 양수 요소가 전체에서 차지하는 비율(백분율)을 계산해야 할 때, 리스트 컴프리헨션(list comprehension)과 len() 함수를 조합하면 아주 간단하게 해결할 수 있습니다.
예제
my_list = [14, 62, -22, 13, -87, 0, -21, 81, 29, 31]
print("The list is :")
print(my_list)
my_result = (len([element for element in my_list if element > 0]) / len(my_list)) * 100
print("The result is :")
print(my_result)
출력 결과
The list is : [14, 62, -22, 13, -87, 0, -21, 81, 29, 31] The result is : 60.0
코드 설명
먼저 양수, 음수, 0이 섞여 있는 리스트를 정의한 뒤 콘솔에 출력합니다.
리스트 컴프리헨션을 사용해 리스트를 순회하면서 0보다 큰 요소만 골라 새로운 리스트를 만들고, 그 길이를
len()으로 구해 양수 요소의 개수를 얻습니다.양수 요소 개수를 전체 요소 개수(
len(my_list))로 나눈 뒤 100을 곱해 백분율을 계산합니다. 파이썬 3에서 나눗셈은 항상 실수(float)를 반환하므로 결과는 60.0이 됩니다.계산된 결과는 변수
my_result에 저장되며, 마지막으로 콘솔에 출력됩니다.
참고 사항
0은 양수도 음수도 아니므로 위 코드에서는 양수로 포함되지 않습니다. 만약 0까지 포함하고 싶다면 조건을 element >= 0으로 변경하면 됩니다.
대체 방법: sum() 활용하기
중간에 불필요한 리스트를 생성하지 않고 싶다면 제너레이터 표현식과 sum()을 사용하는 방법도 좋습니다.
my_result = sum(1 for element in my_list if element > 0) / len(my_list) * 100 print(my_result) # 60.0
이 방식은 조건을 만족하는 요소마다 1을 더해 개수를 세기 때문에 메모리 사용량이 적고, 대용량 데이터를 다룰 때 더욱 효율적입니다.