List Comprehension 이란?
- 기존 List를 사용하여 간단히 다른 List를 만드는 기법
- 포괄적인 List 또는 포함되는 List라는 의미로 사용
- 파이썬에서 가장 많이 사용되는 기법 중 하나
- 일반적으로 for + append 보다 속도가 빠름
Ex 0) 일반적인 코드 샘플 (for + append)
result = []
for i in range(10):
result.append(i)
print(result)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Ex 1) (for + append) -> List comprehension 사용
result = [i for i in range(10)]
print(result)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Ex 2) List comprehension + if
result = [i for i in range(10) if i % 2 == 0]
print(result)
[0, 2, 4, 6, 8]
Ex 3) Nested For loop (for문 2번) (결과는 1-Dimensional List)
- Nested For loop ? : for loop 안에 for loop를 만드는 것
- 아래의 예시에서는 i를 기준으로 For문을 반복한다.
word_1 = "Hello"
word_2 = "World"
result = [i+j for i in word_1 for j in word_2]
print(result)
['HW', 'Ho', 'Hr', 'Hl', 'Hd', 'eW', 'eo', 'er', 'el', 'ed', 'lW', lo', 'lr', 'll', 'ld', 'lW', lo', 'lr', 'll', 'ld', 'oW', 'oo', 'or', 'ol', 'od']
Ex 3-1) 일반적인 이중 for문 (결과는 2-Dimensional List)
word_1 = "Hello"
word_2 = "World"
result = []
for i in word_1:
for j in word_2:
result.append(i+j)
print(result)
[['HW', 'Ho', 'Hr', 'Hl', 'Hd'], ['eW', 'eo', 'er', 'el', 'ed'], ['lW', lo', 'lr', 'll', 'ld'], ['lW', lo', 'lr', 'll', 'ld'], ['oW', 'oo', 'or', 'ol', 'od']]
Ex 3-2) List comprehension (for문 2번) (결과는 2-Dimensional List) (Ex 3에서 바꾸는 법)
- 이 예시에서는 Ex 3 과는 달리 j를 기준으로 For문을 반복한다. (중요)
word_1 = "Hello"
word_2 = "World"
result = [[i+j for i in word_1] for j in word_2]
print(result)
[['HW', 'Ho', 'Hr', 'Hl', 'Hd'], ['eW', 'eo', 'er', 'el', 'ed'], ['lW', lo', 'lr', 'll', 'ld'], ['lW', lo', 'lr', 'll', 'ld'], ['oW', 'oo', 'or', 'ol', 'od']]
Ex 4) Nested For loop + if
# i 와 j 가 같다면 List에 추가하지 않음
case_1 = ["A", "B", "C"]
case_2 = ["D", "E", "A"]
result = [i+j for i in case_1 for j in case_2 if not (i==j)]
print(result)
#정렬이 필요하면 정렬까지 가능(알파벳 순)
result.sort()
print(result)
['AD', 'AE', 'BD', 'BE', 'BA', 'CD', 'CE', 'CA']
['AD', 'AE', 'BA', 'BD', 'BE', 'CD', 'CE', 'CA']
Ex 5) List Comprehension + split
words = 'The quick brown fox jumps over the lazy dog'.split()
stuff = [w.upper(), w.lower(), len(w) for w in words]
for i in stuff:
print(i)
['THE', 'the', 3]
['QUICK', 'quick', 5]
['BROWN', 'brown', 5]
['FOX', 'fox', 3]
['JUMPS', 'jumps', 5]
['OVER', 'over', 4]
['THE', 'the', 3]
['LAZY', 'lazy', 4]
['DOG', 'dog', 3]