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]

Join 함수

  • String List 를 합쳐 하나의 String으로 반환할 때 사용 (List -> String)
  • 어떤 것을 기준으로 합칠 것인지를 명시할 수 있음 (EX 참고)

EX 1) 빈칸을 기준으로 문자열 합치기

colors = ['red', 'blue', 'green', 'yellow']
result = ''.join(colors)

print(result)

'redbluegreenyellow'

 

EX 2) 연결시 공백 1칸으로 연결

result = ' '.join(colors)
print(result)

'red blue green yellow'

 

EX 3) 연결시 ", "으로 연결

result = ', ',join(colors)
print(result)

'red, blue, green, yellow'

 

EX 4) 연결시 "-"으로 연결

result = '-'.join(colors)
print(result)

'red-blue-green-yellow'

Split 함수

  • String Type의 값을 나눠서 List 형태로 변환 (String -> List)
  • BOW 에서 자주 사용된다.

 

 

EX 1) 빈칸을 기준으로 문자열 나누기

# 빈칸을 기준으로 문자열 나누기
items = 'zero one two three'.split()
print(items)

['zero', 'one', 'two', 'three']

 

 

EX 2) "," 을 기준으로 문자열 나누기

# "," 를 기준으로 문자열 나누기
example = 'python,jquery,javascript'
example.split(",")
print(example)

['python', 'jquery', 'javascript']

 

 

EX 2-1) 2의 리스트에 있는 각 값을 a, b, c 변수로 unpacking

example = 'python,jquery,javascript'

a, b, c = example.split(",")
print(a)
print(b)
print(c)

python

jquery

javascript

 

EX 3) "."을 기준으로 문자열 나누고 unpacking

example = 'wwww.naver.com'
subdomain, domain, tld = example.split(".")

print(subdoamain)
print(domain)
print(tld)