List Comprehension 문법: [표현식 for 변수 in 이터러블 (if 조건)]
normal_count = len([p for p in patients if p["systolic"] < 120])
혈압이 정상 범위 (수축기혈압 기준 120 미만)인 환자의 수를 구하고자 한다.
len 즉, 특정 변수에 포함된 원소(딕셔너리, 튜플도 가능)의 개수를 구했다.
⚠️ 리스트 컴프리헨션에서 아직 이해되지 않는 부분이 있었다. 그러나 해결해서 기분이 좋다.
질문: 왜 p for p in patients 라고 했지?
답변: p는 결국 우리가 정하기 나름이다. 변수에 속한 데이터를 p라고도 할 수 있고 patient라고도 할 수 있다. 짧게 p라고 정했던 것이구나.
patients = [
{"name": "김환자", "age": 65, "systolic": 145},
{"name": "이환자", "age": 45, "systolic": 125},
{"name": "박환자", "age": 32, "systolic": 115},
{"name": "최환자", "age": 28, "systolic": 135},
{"name": "정환자", "age": 70, "systolic": 190}
]
print("\n=== 혈압 등급별 통계 ===")
*#[표현식 for 변수 in 이터러블 (if 조건)]*
**normal_count = len([p for p in patients if p["systolic"] < 120])**
print(f"정상: {normal_count}명 ({normal_count / total_patients * 100:.1f}%)")
#결과물
=== 혈압 등급별 통계 ===
정상: 1명 (20.0%)
✅ 한 가지 더 깨달은 것이 있다.
📝 리스트 컴프리헨션에서 조건문의 범위는 시작과 끝을 정해주어야 한다는 것!
리스트 컴프리헨션을 통해 if문을 통해 정상 범위 혈압, 고혈압 전단계, 1기 고혈압, 2기 고혈압의 혈압 범위를 규정할 때는, if-elif-else 로 이어지는 하나의 조건문에 속하지 않기 때문에 범위의 시작과 끝을 정해주어야 한다는 점이다.
print("\n=== 혈압 등급별 통계 ===")
normal_count = len([p for p in patients if p["systolic"] < 120])
prehyper_count = len([p for p in patients if p["systolic"] < 140])
stage1_count = len([p for p in patients if p["systolic"] < 160])
stage2_count = len([p for p in patients if p["systolic"] >= 160])
=== 혈압 등급별 통계 ===
정상: 1명 (20.0%)
고혈압 전단계: 3명 (60.0%)
1기 고혈압: 4명 (80.0%)
2기 고혈압: 1명 (20.0%)
다행히 파이썬은 하나의 문장에 부등호를 써서 쓸 수 있기 때문에 직관적으로 코드를 짤 수 있었다.
print("\n=== 혈압 등급별 통계 ===")
normal_count = len([p for p in patients if p["systolic"] < 120])
prehyper_count = len([p for p in patients if **120 <=** p["systolic"] < 140])
stage1_count = len([p for p in patients if **140 <=** p["systolic"] < 160])
stage2_count = len([p for p in patients if p["systolic"] >= 160])
=== 혈압 등급별 통계 ===
정상: 1명 (20.0%)
고혈압 전단계: 2명 (40.0%)
1기 고혈압: 1명 (20.0%)
2기 고혈압: 1명 (20.0%)