항해 10일차 TIL
1. 리스트 정리
s = ['a', 'b', 'c', 'd', 'e']
s[0] == a # indexing. 리스트는 0번째부터 시작한다. s[0]엔 첫번째 자리에 있는 'a'가 들어온다.
s[4] == e #마찬가지로 0번째부터 시작했으니 실제 갯수보다 하나 적은 숫자
s[-1] == e # indexing reverse order. 끝은 -1부터 시작한다.
s[0:3] == [a, b, c] # 0번째부터 시작해서 3번째 바로 전까지, 즉 0, 1, 2 까지만 가져오겠다는 의미.
참고 : https://blockdmask.tistory.com/425
2. 리스트를 스트링으로 만들기
1) 변환시켜주는 함수
def listToString(s):
# 빈 스트링을 만들어준다
str1 = ""
# s 갯수만큼 돌리며 (이번 경우는 3번)
for a in s:
# str1에 s의 요소를 하나씩 붙인다
str1 += a
# 완성된 str1 반환
return str1
# 실행코드
s = ['이렇게', '이어서', '써진다']
print(listToString(s))
이 경우 모든 요소들이 다 붙어버리기 때문에 결과는 '이렇게이어서써진다'로 나온다. 중간에 띄어쓰기를 하려면 str1에 a를 붙여준 다음 ' '로 빈 공간을 붙여줄 수도 있지만, 맨 끝자리에도 공백이 들어가기 때문에 이걸 막으려면 식이 좀 더 복잡해진다.
2) join을 이용한 방식
s = ['이번엔', '이렇게', '써야지']
str1 = ' '
print (str1.join(s))
조인을 이용하면 깔끔하다. 빈 스트링을 만들 때 처음부터 공백을 넣어 만들면 자연스럽게 사이가 띄워진다. 공백이 아닌 다른 문자를 넣어도 된다. 예를 들어 str1에 "+"를 넣어 initialize 하면 "이번엔+이렇게+써야지"로 나온다.
3) list comprehension
s = ['I', 'want', 4, 'apples', 'and', 18, 'bananas']
listToStr = ' '.join([str(elem) for elem in s])
print(listToStr)
음... 이건 어떻게 쓰는건지... 조금 더 뜯어봐야겠다... listToStr = ' '.join() 까진 이해 됐는데, 왜 그 안에 [str(elem) for elem in s]가 들어가는건지...? for a in b는 알겠는데... 음... 음...!!! 이건 좀 더 공부해야겠다.
참고 :
https://shoark7.github.io/programming/python/about-list-comprehension-python
4) 매핑 이용한 방법
s = ['I', 'want', 4, 'apples', 'and', 18, 'bananas']
listToStr = ' '.join(map(str, s))
print(listToStr)
3. 진도 및 내가 공부해야할 것들 정리
1) 6장 문자열 조작 (14일 진도 내용)
여기서 꼭 알아둬야 할 것 :
슬라이싱. 투포인터 방식. 추가(append). 정렬(sort). 스플릿(split).
추가로 알아두면 좋을 것 :
a.lower() ==> 영문자를 전부 소문자로 변환
a.isalnum() ==> 영문자, 숫자 여부를 판별
counts = collections.Counter(words) ==> words의 요소가 몇개씩 나오는지 그 결과 counts에 담아주기
참고하면 좋을 곳 :
https://dojang.io/mod/page/view.php?id=2299
2) 7장 배열 (15일 진도 내용)
꼭 알아둬야 할 것 :
자료구조란?. 배열(Array)이란?. 리스트란?.
리스트 ==> 파이썬의 동적 배열 자료형
추가로 알아두면 좋을 것 :
enumerate(n) ==>
sys.maxsize ==>
min(), max() ==>
참고하면 좋을 곳 :
https://dev-baek.tistory.com/6
3) 8장 연결리스트 (17일 진도 내용)
꼭 알아둬야 할 것 :
연결리스트란?. 노드란?. 리스트에서 pop(0)을 했을 때 시간복잡도가 올라가는 원인.
추가로 알아두면 좋을 것 :
런너기법 이해. 재귀구조 이해. 전가산기 이해.
4) 9장 스택, 큐 (18일 진도 내용)
꼭 알아둬야 할 것 :
스택 자료형 특징. 큐 자료형 특징. 연결리스트를 이용한 스택 추상자료형(ADT) 이해.
추가로 알아두면 좋을 것 :
엔티티.
5) 10장 데크, 우선순위 큐 (18일 진도 내용)
데크 특징. 우선순위 큐란 무엇인지. heapq모듈과 heappop(), heappush().
추가로 알아두면 좋을 것 :
스레드 세이프. GIL이 뭔지.
6) 11장 해시 테이블 (19일 진도 내용)
참고 :
https://nlp.chonbuk.ac.kr/AL/ch06.pdf
https://stephenagrice.medium.com/how-to-implement-a-hash-table-in-python-1eb6c55019fd
https://jinyes-tistory.tistory.com/10?category=841411
4. 오늘의 생각
처음엔 코드블럭을 넣으니 내용이 알차보여서 좋았는데, 시간이 지날 수록 쓸데없이 스크롤만 길어진다는 느낌이 강하게 들었다. 접기를 넣으니 일단은 보기에 편안하다.
나중에 한번 더 적절하게 정리를 해야겠다. TIL엔 내가 뭘 배웠는지 개념만 정리하고, 저런 코드는 나중에 내가 또 사용할 수 있도록 나만의 코드스니펫 같은 것을 만들어서 관리하면 좋을 것 같다.
계속해서 진도가 밀리고 있다... 풀지도 못하면서 계속 문제 붙들고 있게 된다. 개념 정리하는게 더 중요한데, 오후에 다른 수강생분들 과제 발표하는거 들으려면 어느정도 문제를 봐놔야해서 결국 문제를 보게 된다. 사실 다른 수강생들 발표하는거 듣는 것 보다 내가 발표 순서에 걸릴까봐도 있긴 하지만... 음... 부담은 늘어만 가는데 하는건 없네. 어째야할까.
오늘 오전엔 팀원분께서 주신 쉬운 파이썬 문제를 몇번 풀어봤다. 이걸 주로 풀었어야 했는데, 쓸데없이 어려운 문제 푸느라 시간을 너무 오래 썼다. 내일은 진짜로 중요한것에 집중해야지.
이제 시작한지 열흘 쯤 되니까 체력도 떨어지고... 집중도 진짜 안된다. 이 와중에 팀원 분들도 힘들어하시니까 나도 자꾸만 늘어지게 된다. 어떻게 해야할까. 어째야할까...