-
파이썬을 파이썬답게_2Python 2019. 11. 22. 10:06
이전글 보러가기
2019/09/30 - [Python] - 파이썬을 파이썬답게_1
프로그래머스의 파이썬을 파이썬답게 라는 강의를 보고 정리한 글이다.
원본을 유지한채 정렬된 리스트 구하기 - sorted
파이썬의
sort()
함수를 사용하면 리스트의 원소를 정렬할 수 있다.sort
함수는 원본의 순서를 변경 시킨다.- deep copy와 sort 함수 이용
list1 = [4, 3, 2, 1] list2 = [i for i in list1] # 또는 copy.deepcopy를 사용 list2.sort()
- sorted 함수를 이용
>>> list1 [3, 2, 1] >>> list2 = sorted(list1) >>> list2 [1, 2, 3] >>> list1 [3, 2, 1]
2차원 리스트 뒤집기
- 입력
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
- 출력
[[1, 4, 7], [2, 5, 8], [3, 6, 9]]
- 내가 작성한 코드
def solution(mylist): res = list(zip(*mylist)) answer = [] for i in res: answer.append([*i]) return answer
- zip 함수와 unpacking을 이용
mylist = [ [1,2,3], [4,5,6], [7,8,9] ] new_list = list(map(list, zip(*mylist)))
zip 함수
zip(*iterables)는 각 iterables의 요소들을 모으는 이터레이터를 만든다.
튜플의 이터레이터를 돌려주는데, i번째 튜플은 각 인자로 전달된 시퀀스나 이터러블의 i번재 요소를 포함한다.
- 두 리스트의 합들을 출력
list_1 = [1, 2, 3, 4] list_2 = [10, 20, 30, 40] for i, j in zip(list_1, list_2): print(i + j) # 11 # 22 # 33 # 44
- key 리스트와 value 리스트로 딕셔너리 생성하기
animals = ['cat', 'dog', 'lion'] sounds = ['meow', 'woof', 'roar'] answer = dict(zip(animals, sounds)) print(answer) # {'lion': 'roar', 'dog': 'woof', 'cat': 'meow'}
모든 멤버의 type 변환하기
문자열 리스트를 입력 받아서 정수형 리스트로 출력
- 입력
['1', '100', '33']
- 출력
[1, 100, 33]
- 내가 작성한 코드
def solution(mylist): return [int(i) for i in mylist]
위 코드를 실행하면 결과가 제대로 나온다.
그런데 이유는 잘 모르겠지만 속도가 너무 느리다.
Why ???
그래도 처음으로 강의에 나온 코드와 유사한 코드를 작성했다.
map 함수 응용하기
정수를 담은 이차원 리스트가 주어질때 원소의 길이를 출력
- 입력
[[1], [2]] [[1, 2], [3, 4], [5]]
- 출력
[1, 1] [2, 2, 1]
- 코드
def solution(mylist): answer = list(map(len, mylist)) return answer
sequence 멤버를 하나로 이어붙이기
문자열 리스트를 받아서 모두 이어 붙인 문자열을 출력
- 입력
a = ['1','234', '55']
- 출력
'123455'
- 내가 작성한 코드
def solution(mylist): answer = "" for i in mylist: answer += i return answer
- 파이썬의
join
함수를 이용
def solution(mylist): answer = ''.join(mylist) return answer
삼각형 별찍기
정수 n이 주어질때 별(*) 문자를 이용해 높이가 n인 삼격형 출력
- 입력
3
- 출력
* ** ***
- 내가 작성한 코드
n = int(input().strip()) for i in range(1, n+1): print('*'*i)
곱집합(Cartesian product) 구하기 - product
iterable으로 곱집합을 구하기
ex) 'ABC', 'xy'의 곱집합은 Ax Ay Bx By Cx Cy 입니다.
- 파이썬의
itertools.projuct
를 이용(참고)
import itertools iterable1 = 'ABCD' iterable2 = 'xy' iterable3 = '1234' itertools.product(iterable1, iterable2, iterable3)
itertools 에 대해 아직은 잘 모르겠다.
따로 추가적인 공부가 필요해 보인다.
2차원 리스트를 1차원 리스트로 만들기
문자열을 담은 2차원 리스트를 1차원 리스트로 만들어 출력
- 입력
[[1], [2]] [['A', 'B'], ['X', 'Y'], ['1']]
- 출력
[1, 2] ['A', 'B', 'X' ,'Y', '1']
- 내가 작성한 코드
def solution(mylist): answer = [] for i in mylist: for j in i: answer.append(j) return answer
- 반복문을 한번만 사용한 코드
my_list = [[1, 2], [3, 4], [5, 6]] answer = [] for i in my_list: answer += i print(answer) # [1, 2, 3, 4, 5, 6]
- 파이썬의 sum함수를 이용
my_list = [[1, 2], [3, 4], [5, 6]] answer = sum(my_list, [])
- itertools.chain 을 이용
my_list = [[1, 2], [3, 4], [5, 6]] import itertools answer = list(itertools.chain.from_iterable(my_list))
- itertools와 unpacking 을 이용
my_list = [[1, 2], [3, 4], [5, 6]] import itertools answer = list(itertools.chain(*my_list))
- reduce 함수 이용
my_list = [[1, 2], [3, 4], [5, 6]] # 방법 1 from functools import reduce answer = list(reduce(lambda x, y: x+y, my_list)) # 방법 2 from functools import reduce import operator answer = list(reduce(operator.add, my_list))
하나의 문제를 푸는데
엄청 다양한 방법이 있는 것 같다.
이해가 안되는 부분도 있지만 계속 진도를 나가 보자.
'Python' 카테고리의 다른 글
반복문 상태바 라이브러리(tqdm) (0) 2020.08.17 파이썬을 파이썬 답게_3 (0) 2019.11.29 파이썬을 파이썬답게_1 (0) 2019.09.30 [Python] zip() 함수 (0) 2019.09.10 Python Anaconda 가상환경 설정하기 (0) 2019.08.29