Today's Trigger
오늘도 코드카타로부터 시작된 TIL
오늘의 문제는 문자열 내 마음대로 정렬하기
https://school.programmers.co.kr/learn/courses/30/lessons/12915
나의 제출 답안은 https://github.com/duswo3o/algorithm_codekata/blob/main/0705.py 여기로!
이중리스트는 리스트 안에 리스트가 있는 형태를 말한다
예를들어
l = [["a","b"],["c","d"]]
이런 형태의 리스트를 이중리스트라고 하는데
위 리스트를 어떻게 아래의 리스트처럼 만들 것인가에 대한 내용을 다루고자 한다
l = ["a","b","c","d"]
1. sum() 이용하기
파이썬에서 제공하는 sum()함수를 살펴보면
사실 봐도 잘 모른다
설명을 덧붙여 보자면 sum은 2개의 인자를 받을 수 있는데 아무것도 입력하지 않으면 0이 되는 것이다
그래서 보통 sum() 함수를 사용할 때 괄호 안에 하나의 정수로 된 리스트를 입력하면 정수 리스트의 합을 반환해 주는 것이다
그러면 다른 값을 입력한다면?
일단 sum함수에 하나의 정수 리스트만 넣는다면
a =[1,2]
print(sum(a))
너무나 당연하게도 3을 반환해준다
그리고 sum함수에 정수값을 하나 더 넣어주어서
print(sum(a, 10))
이렇게 실행하게 되면 13이라는 값을 얻을 수 있게 된다
이것은 sum 함수에서 start = 10이라는 값으로 설정해준 것이 된다
즉 10+1+2를 계산하여 13을 리턴해 주는 것이다
물론 아무것도 입력하지 않은 위의 경우는 0+1+2 를 계산해 리턴해 준 것이겠지!
그럼 둘 다 리스트를 넣으면 어떻게 되느냐?
a = [1,2]
b = [3,4]
print(sum(a, b))
이걸 실행하면
TypeError: can only concatenate list (not "int") to list
이 오류가 발생한다. 대충 알아보면 리스트는 리스트끼리 합칠 수 있다! 정수가 아니라!
이런 뜻인데 이 sum 함수가 왜 이런 말을 하나면
sum(a,b) = [3,4]+1+2 라고 생각하기 때문이다! 그래서 리스트는 리스트끼리만 합칠 수 있어라고 말하는 것!
이걸 이용해서 이중리스트를 풀어보자
l = [["a","b"],["c","d"]]
print(sum(l,[]))
이렇게 작성하면 python의 sum함수는 []+["a","b"]+["c","d"]를 계산하게 되어
우리에게 ["a","b","c","d"]를 리턴해 주게 되는 것이다
2. itertools.chain() 사용하기
itertools는 파이썬에서 제공하는 라이브러리로 itertools가 있는데 itertools.chain()을 사용하면 쉽게 이중 리스트를 풀 수 있다
import itertools
l = [["a","b"],["c","d"]]
print(list(itertools.chain(l)))
이중리스트를 풀겠다고 냅다 이렇게 실행하면
원하던 값은 안나오고
[["a","b"],["c","d"]] 이렇게 나온다
그래서 우리가 원하는 값을 얻기 위해서는
print(list(itertools.chain(*l)))
이처럼 앞에 *을 붙여주어야 한다
그러면 원래 얻고자 했던 ["a","b","c","d"]를 출력하게 된다
3. 반복문으로 풀기
사실 가장 쉽게 생각할 수 있는 방법이 반복문을 돌려서 푸는 것이다
n = []
for i in l:
for j in i:
n.append(j)
print(n)
이걸 리스트 컴프리헨션을 사용해서 한 줄로 작성하면
print([j for i in l for j in i])
이렇게 되는 것이다
그럼 이 세 개 중 무엇을 사용하는 것이 가장 좋은가?
각각을 출력해보면
litertools.chain을 사용한 것이 가장 빠르다는 것을 알 수 있다!
물론 데이터 많지 않아 실제로 체감하기는 힘들겠지만,,,
그저 상황에 맞게 쓰면 될 것 같다
오늘자 코드카타를 풀면서 sum의 새로운 사용법에 대해 알게 되었다
코드카타를 하면서 원래 쓰던 방식과 다르게 사용될 수 있다는걸 알아서 꽤나 흥미로웠다
역시 알고있던거라도 놓치는 부분이 있을 수 있으니 잘 찾아보는게 중요하단걸 다시 알게 되었달까...
물론 지금 풀고있는 코드카타가 어려운 문제가 아니라 제대로 알고리즘을 경험하는 것은 아니지만
그래도 열심히 코드카타 하면서,,, 알고리즘에 대한 공부를 조금씩 해야 할 것 같다!
사실 안 기뻐 내일 알바가야해...
'[내일배움캠프]스파르타코딩클럽 AI 웹개발 > Today I Learned' 카테고리의 다른 글
[내일배움캠프 12일차 TIL] 자료구조-큐(Queue) (0) | 2024.07.09 |
---|---|
[내일배움캠프 11일차 TIL] 자료구조 - 연결리스트(Linked list)/스택(Stack) (0) | 2024.07.08 |
[내일배움캠프 09일차 TIL] 파이썬에서 클래스 이해하기 (0) | 2024.07.04 |
[내일배움캠프 08일차 TIL] ASCII(아스키코드) with python (0) | 2024.07.03 |
[내일배움캠프 07일차 TIL]무한루프 반복문 (1) | 2024.07.02 |