Zip 함수

  • 두 개의 List 의 같은 인덱스에 위치한 값들을 병렬적으로 추출
  • 벡터 값을 계산할 때 List Comprehension과 함께 사용

 

Ex 1) 병렬적으로 값을 추출 

alist = ['a1', 'a2', 'a3']
blist = ['b1', 'b2', 'b3']

for a, b in zip(alist, blist):
    print(a, b)

a1 b1

a2 b2

a3 b3

 

 

Ex 2) 2개 이상의 Tuple을 같은 index 끼리 묶음

a, b, c = zip((1,2,3), (10,20,30), (100,200,300))
print(a)
print(b)
print(c)

(1, 10, 100)

(2, 20, 200)

(3, 30, 300)

 

 

Ex 3) 각 Tuple의 같은 index를 묶어 합을 list로 변환

result = [sum(x) for x in zip((1,2,3), (10,20,30), (100,200,300)]
print(result)

[111, 222, 333]

Enumerate 함수

  • List의 값(element)을 추출할 때 인덱스 번호를 함께 붙여 추출하는 방법
  • 인덱스 번호 - 값 의 순서
  • 자바에서도 비슷하게 사용

 

Ex 1) List에 있는 값을 인덱스 번호와 함께 추출

for i, v in enumerate(['tic', 'tac', 'toc']):
    print(i, v)

0 tic

1 tac

2 toc

 

 

Ex 2) List에 있는 index 와 값을 unpacking하여 list로 저장

  • mylist에 enumerate 먹이고, 다시 list 먹이면, 원래 값에 인덱스를 포함해서 리스트를 만들 수 있다.
mylist = ["a", "b", "c", "d"]
print(list(enumerate(mylist)))

[(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd')]

 

Ex 3) 문장을 List로 만들고, List의 index와 값을 unpacking하여 dict로 저장

result = {i:j for i, j in enumerate('This blog is a student technology blog.'.split())}
print(result)

{0:'This', 1:'blog', 2:'is', 3:'a', 4:'student', 5:'technology', 6:'blog.'}

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'