파이썬을 파이썬 답게2 | 프로그래머스 강의

타샤's 월드·2022년 8월 11일
0

iterable: 자신의 멤버를 한 번에 하나씩 리턴할 수 있는 객체입니다. list, str, tuple, dict 등이 여기에 속합니다.

sequence: int 타입 인덱스를 통해, 원소에 접근할 수 있는 iterable 입니다. iterable의 하위 카테고리라고 생각하시면 됩니다. list, str, tuple이 여기 속합니다. (dictionary는 다양한 타입을 통해 원소에 접근할 수 있기 때문에 sequence에 속하지 않습니다.)

zip 함수?!

zip은 각 iterable 요소들을 모으는 이터레이터를 만듭니다. 튜플 이터레이터를 돌려주는데 i번째 튜플은 각 인자로 전달된 시퀀스나 이터러블의 i번째 요소를 포함합니다

mylist = [1,2,3]
new_list = [40,50,60]
for i in zip(mylist, new_list):
  print(i)
  
  >>>(1, 40)(2, 50)(3, 60)
list1 = [1, 2, 3, 4]
list2 = [100, 120, 30, 300]
list3 = [392, 2, 33, 1]
for n1, n2, n3 in zip(list1, list2, list3):
  print(n1,n2,n3)
  
  >>>1 100 392   2 120 2   3 30 33   4 300 1
animals = ['cat', 'dog', 'lion']
sounds = ['meow', 'woof', 'roar']
answer= dict(zip(animals, sounds))
print(answer)
  >>>{'cat': 'meow', 'dog': 'woof', 'lion': 'roar'}

Zip: 2차원 리스트 뒤집기

'''각 n번째 리스트에 값을 넣어주는 방식'''
mylist = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
new_list = [[], [], []]

for i in range(len(mylist)):
    for j in range(len(mylist[i])):
        new_list[i].append(mylist[j][i])
'''zip함수를 사용하면 훨씬 편하다'''
mylist = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
new_list = list(map(list, zip(*mylist)))


print(*mylist)
>>>[1, 2, 3] [4, 5, 6] [7, 8, 9]

print(list(zip(*mylist)))
>>>[(1, 4, 7), (2, 5, 8), (3, 6, 9)]

print(list(map(list,zip(*mylist))))
>>>[[1, 4, 7], [2, 5, 8], [3, 6, 9]]

zip: i번째 원소와 i+1번째 원소 다루기

'''내가 푼 식...ㅎ'''
mylist=[83, 48, 13, 4, 71, 11]
n=len(mylist)
output=[]
for i in range(0,n-1): #0부터 4까지
  M=max(mylist[i],mylist[i+1])
  m=min(mylist[i],mylist[i+1])
  output.append(M-m)
print(output)
'''절대값 함수 abs를 생활화하자'''
mylist=[83, 48, 13, 4, 71, 11]
output=[]
for i in range(len(mylist)-1):
  output.append(abs(mylist[i]-mylist[i+1]))
'''zip을 사용하면 더 좋다'''
mylist=[83, 48, 13, 4, 71, 11]
output=[]
for num1, num2 in zip(mylist, mylist[1:]):
  output.append(abs(num1-num2))

join함수

문자열 배열 ['1', '100', '33']을 이어 붙여 문자열 '110033' 만들기

my_list = ['1', '100', '33']
answer = ''.join(my_list)


>>>110033

곱집합 itertools product

두 스트링 'ABCD', 'xy' 의 곱집합은 Ax Ay Bx By Cx Cy Dx Dy 입니다.


import itertools

iterable1 = 'ABCD'
iterable2 = 'xy'
iterable3 = '1234'
print(list(itertools.product(iterable1, iterable2, iterable3)))

chain: 2차원 리스트를 1차원으로 만들기

my_list = [[1, 2], [3, 4], [5, 6]]

# 방법 1 - sum 함수
answer = sum(my_list, [])

# 방법 2 - itertools.chain
import itertools
list(itertools.chain.from_iterable(my_list))

# 방법 3 - itertools와 unpacking
import itertools
list(itertools.chain(*my_list))

# 방법 4 - list comprehension 이용
[element for array in my_list for element in array]

# 방법 5 - reduce 함수 이용 1
from functools import reduce
list(reduce(lambda x, y: x+y, my_list))

# 방법 6 - reduce 함수 이용 2
from functools import reduce
import operator
list(reduce(operator.add, my_list))

리스트 회전할땐 deque

from collections import deque

a=[1,2,3,4,5]
q=deque(a)
q.rotate(2)
print(q)


>>>deque([4, 5, 1, 2, 3])
'''deque 사용법:  대충 appendleft와 popleft를 할 수 있다?!'''
>>> from collections import deque


>>> d = deque([1,2,3,4,5])
>>> d.append(6)
>>> d
deque([1, 2, 3, 4, 5, 6])


>>> d.appendleft(0)
>>> d
deque([0, 1, 2, 3, 4, 5, 6])


>>> d.pop()
6
>>> d
deque([0, 1, 2, 3, 4, 5])


>>> d.popleft()
0
>>> d
deque([1, 2, 3, 4, 5])
profile
그때 그때 꽂힌것 하는 개발블로그

0개의 댓글