Post

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])
enumeratefor i, val in enumerate(arr)
zipfor x, y in zip(a, b)
sorted with keysorted(arr, key=lambda x: (x[1], -x[0]))
This post is licensed under CC BY 4.0 by the author.