찬우의 이것저것 Chanwoo's blog

[프로그래머스 python] 파이썬을 파이썬답게

https://programmers.co.kr/learn/courses/4008

굉장히 좋은 강의인데 심지어 무료이다.

수강 전에..

정수를 담은 이차원 리스트, mylist 가 solution 함수의 파라미터로 주어집니다. solution 함수가 mylist 각 원소의 길이를 담은 리스트를 리턴하도록 코드를 작성해주세요.

제한 조건
  • mylist의 길이는 100 이하인 자연수입니다.
  • mylist 각 원소의 길이는 100 이하인 자연수입니다.
input output
[[1], [2]] [1,1]
[[1, 2], [3, 4], [5]] [2,2,1]

위 문제를

def solution(mylist):
    answer = []
    for i in mylist:
        answer+=(len(i))
    return answer

위와 같이 풀었다면 이 수업을 들어야 한다는 말에 이끌려 따라가기 시작했다.

def solution(mylist):
    return list(map(len, mylist))

유용하다 생각된것

int(num, base)를 통한 진법 변환

print(int('111',2)) # 2진수 111 => 10진수 7 

zip

여러 리스트를 동시에 순회할수있다.

list1 = [1,2]
list2 = [3,4]
print(list(zip(list1, list2))) # [(1,3),(2,4)]

두개의 list를 하나의 dict로 변환

animals = ['cat', 'dog', 'lion']
sounds = ['meow', 'woof', 'roar']
answer = dict(zip(animals, sounds)) # {'cat': 'meow', 'dog': 'woof', 'lion': 'roar'}

map

함수를 iterable한 객체에 반복적용

리스트내 모든 멤버의 타입을 문자열에서 정수로 변환

list1 = ['1', '100', '33']
list2 = list(map(int, list1)) # [1,100,33]

join

리스트 내용을 이어붙이기

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

product, permutations, combinations

곱집합(카티션 곱), 순열(순서), 조합(순서x)

import itertools

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

pool = ['A', 'B', 'C']
print(list(map(''.join, itertools.permutations(pool)))) # 모든(3개)의 원소로 순열 만들기
print(list(map(''.join, itertools.permutations(pool, 2)))) # 2개의 원소로 순열 만들기

print(list(map(''.join, itertools.combinations(pool, 3)))) # 3개의 원소로 조합 만들기
print(list(map(''.join, itertools.combinations(pool, 2)))) # 2개의 원소로 조합 만들기


2차원 리스트 내용물 꺼내어 1차원 리스트로 바꾸기

여러방법이 있는데 이 방법이 제일 기억하기 좋은듯

sum(iterable [,start]) start부터 리스트 내 모든걸 더한 합계를 돌려줌

[] + [1, 2] + [3, 4] + [5, 6]

my_list = [[1, 2], [3, 4], [5, 6]]
answer = sum(my_list, []) # [1, 2, 3, 4, 5, 6]

for와 if를 한줄에!

리스트의 원소 중 짝수인 값만을 제곱해서 return한다면

mylist = [3, 2, 6, 7]
answer = []
for i in mylist:
    if i%2 == 0:
        answer.append(i**2) # 들여쓰기를 두 번 함
        
answer = [ i**2 for i in mylist if i %2 == 0]