3. List Comprehension
List Comprehension
1. 리스트 컴프리헨션
- 리스트 컴프리헨션은 for 문을 이용해서 간결하게 리스트를 생성하는 방법이다.
1
2
3
4
5
6
7
# 0부터 9까지 제곱 리스트
squares = [x**2 for x in range(10)]
print(squares ) # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
# 짝수만 뽑기
evens = [x for x in range(10) if x % 2 == 0]
print(evens) # # [0, 2, 4, 6, 8]
⚠️ 주의
- 복잡한 연산이 포함되면 오히려 가독성이 떨어질 수 있음
- 너무 중첩된 컴프리헨션은 피하는게 좋음
2. 다차원 리스트 초기화
❌ 잘못된 방식
1
2
3
4
5
arr = [[0] * 4] * 3 # 모든 행이 같은 리스트 객체를 참조
arr[0][0] = 1
print(arr)
# [[1, 0, 0, 0], [1, 0, 0, 0], [1, 0, 0, 0]]
올바른 방식
1
2
3
4
5
arr = [[0] * 4 for _ in range(3)]
arr[0][0] = 1
print(arr)
# [[1, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
리스트 컴프리헨션을 사용하면 각 행이 독립적인 객체가 되어 참조 오류를 방지할 수 있다.
3. 리스트 관련 내장 함수
1
2
3
4
5
6
7
8
arr = [3, 1, 4, 2]
sum(arr) # 10
max(arr) # 4
min(arr) # 1
len(arr) # 4
sorted(arr) # [1, 2, 3, 4]
sorted(arr, reverse = True) # [4, 3, 2, 1]
4. 람다 함수 (lambda function)
lambda
는 이름 없는 함수(익명 함수)를 짧게 만들 때 사용하는 문법이다.- 주로
sorted
,map
,filter
같은 함수와 함께 사용한다.
문법
1
lambda 변수 : 리턴값
1
2
3
4
5
f = lambda x : x + 1
print(f(3)) # 4
add = lambda x, y : x + y
print(add(2, 5)) # 7
왜 쓸까?
- 정렬할 때 기준을 따로
def
로 안 만들고, 한 줄로 간단하게 전달 가능
1
2
3
arr = [(1, 3), (2, 2), (3, 1)]
sorted(arr, key = lambda x : x[1])
# [(3, 1), (2, 2), (1, 3)]
5. 리스트 정렬 고급 (key + lambda)
1
2
3
4
students = [("홍길동", 95), ("이순신", 77), ("가나다", 88)]
sorted(student, key=lambda x: x[1])
# 점수 기준 오름차순 정렬
내림차순 정렬
1
sorted(student, key=lambda x: x[1], reverse = True)
복합 조건 정렬
1
2
# 점수 오름차운, 점수가 같다면 이름 내림차순
sorted(student, key=lambda x: (x[1], -ord(x[0][0])))
6. enumerate, zip
- enumerate: 인덱스와 함께 반복
1
2
3
arr = ['a', 'b', 'c']
for idx, val in enumerate(arr):
print(idx, val) # 0 a, 1 b, 2 c
- zip: 여러 리스트를 묶어서 반복
1
2
3
4
5
6
7
names = ["홍길동", "이순신"]
scores = [95, 77]
for name, score in zip(names, scores):
print(name, score)
# 홍길동 95
# 이순신 77
요약
개념 | 주요 사용 예시 |
---|---|
리스트 컴프리헨션 | [x for x in range(10) if x%2==0] |
2차원 리스트 초기화 | [[0]*m for _ in range(n)] |
lambda 함수 | sorted(data, key=lambda x: x[1]) |
enumerate | for i, val in enumerate(arr) |
zip | for x, y in zip(a, b) |
sorted with key | sorted(arr, key=lambda x: (x[1], -x[0])) |
This post is licensed under CC BY 4.0 by the author.