일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- lower_case_table_names
- flask
- Dictionary
- 외래키
- timestamp
- 세그먼트 트리
- project euler
- 자료구조
- Codeforces
- BOJ
- 2557
- 소수
- convention
- FOREIGN KEY
- 파이썬
- 리스트 컴프리헨션
- 네이밍
- list comprehension
- 큰 수 나누기
- enumerate
- 에라토스테네스의 체
- 딕셔너리
- mysql
- itertools
- floor
- ceil
- datetime
- SUM
- python
- SUM()
- Today
- Total
목록python (10)
늒네 기록
코드를 짜다 보면 종종 주어진 선택지들 중에 몇 개를 선택해서 조합을 만들고, 그 조합들을 가지고 계산을 돌려야 할 일이 있을 때가 있다. 예를 들어, A, B, C, D 선택지가 있을때, 이 중에서 i) 중복을 허용하여 두 개를 순서대로 뽑아서 나열한다 -> AA, AB, AC, AD, BA, BB, BC, BD, CA, CB, CC, CD, DA, DB, DC, DD ii) 중복을 허용하지 않고 두 개를 순서대로 뽑아서 나열한다 ->AB, AC, AD, BA, BC, BD, CA, CB, CD, DA, DB, DC iii) 중복을 허용하지 않고 두 개를 뽑는다. 순서가 달라도 조합이 같으면 같은 걸로. ->AB, AC, AD, BC, BD, CD 이때 위의 i), ii), iii) 상황에서 각각 파이..
간단한 웹서버를 만들어보기 위해서 몇 가지 대안들을 보던 중 flask가 눈에 들어와서 한 번 시도해보기로 했다. flask의 helloworld 같은 예제들부터 따라서 만들어보는 것이 좋을것 같아 찾아보니 한국어로 된 도움말 documentation이 준비되어 있었고, 특히 빠르게 시작하기에 있는 내용을 그대로 따라해보면 기초적인 서버를 만드는 것부터 시작할 수 있어서 좋았다. 빠르게 시작하기 링크의 앞부분에 flask를 설치하지 않았으면 설치하는 것부터 시작하라며 다른 페이지 링크를 걸어주는데, 해당 링크에는 virtualenv를 활용하는 방법도 같이 자세히 설명되어 있다. 해당 내용에 관심 있는 개발자라면 같이 보는 것도 좋지만, 굳이 따라하지 않아도 작동에는 큰 문제가 없으니 아래와 같이 로컬에 ..
파이썬에서 리스트 안에 있는 값들로 작업을 할때 다음과 같은 두 가지 접근 방법이 있을 것이다. 1 2 3 4 5 6 7 8 9 10 l = ['x', 'y', 'z'] # list에 인덱스로 접근 for i in range(len(l)): print(l[i]) # list 아이템에 직접 접근 for s in l: print(s) cs 하나는 인덱스로 접근하는 방법, 하나는 아이템에 직접 접근하는 방법. 첫 번째 방법은 내가 몇 번째 인덱스 가지고 작업하고 있는지를 기준으로 생각하기 쉬운 반면, 리스트가 들고있는 아이템 자체로 코드를 짠다는 생각을 하기 어렵다. 예를 들어, 아래와 같은 코드가 있다고 하면, 1 2 3 4 5 6 7 8 9 10 group = ['John', 'Kay', 'Sam'] # ..
평소에 제일 많이 접하게 되는 sum() 함수 사용법은 다음과 같을 것이다. l = [1, 2, 3, 4] print(sum(l)) # 10 이때 sum의 역할은 리스트 l 안에 있는 정수들을 전부 더해준다. 그런데, sum에 두번째 인자를 넣을 수 있다. 두 번째 인자는 최초의 변수 역할을 해주는데, 아래의 코드를 보면 좀 더 명확하게 이해할 수 있다. x = 5 l = [1, 2, 3, 4] for num in l: x+=num print(x) # 15 y = 5 print(sum(l, y)) # 15 print(y) # 5 sum()함수가 주어진 이터레이터에 있는 값들을 모두 더해주는 거라면, +가 정의된 다른 타입들도 넣을 수 있는 것이 아닐까 의문을 가질 수 있다. 예를 들어, 1) string..
다음과 같은 리스트를 만들고 싶다면 어떻게 해야할까? l = [ [0], [0,1], [0,1,2], [0,1,2,3], [0,1,2,3,4] ] 이전에 쓴 list comprehension 글에서 사용한 방법을 각 아이템마다 적용해보면 다음과 같다. l = [ [i for i in range(1)], [i for i in range(2)], [i for i in range(3)], [i for i in range(4)], [i for i in range(5)] ] 그런데, 여기에도 규칙이 있지 않은가? range 안에 있는 숫자가 [1,2,3,4,5] 안에 있는 숫자로, 너무나도 range로 표현하면 좋겠다는 생각이 든다. 저걸 j for j in range(1,6)으로 표현한다고 하고, 저 리스트 자..
간단한 실험. s='1234'일때 list(s)값은? s = '1234' print(list(s)) # ['1', '2', '3', '4'] 간단하게 각 글자를 하나씩 리스트 아이템으로 분리해버렸다! 비슷하게 set(s)를 해도 작동한다. 이 성질을 활용하면 project euler 32번에 쉽게 접근할 수 있다. 내용은 [PE] Project Euler 32 글에 이어서.
문제 풀때 get함수를 아래와 같이 사용할 때도 종종 있다. l = [1,2,2,3,1,2,3,1,4,2,3,4,2,1,2,3,4,1] x = {} for i in l: x[i] = x[i]+1 if x.get(i) else 1 print(x) # {1: 5, 2: 6, 3: 4, 4: 3} 물론, x.get(i) 대신 i in x로 쓰는 것이 더 짧고 직관적이긴 하지만...
파이썬에서 딕셔너리를 다룰 때 종종 마주칠 수 있는 상황. x = {} for i in range(5): x[i] = i*i # x = {0: 0, 1: 1, 2: 4, 3: 9, 4: 16} for i in range(10): print(f'x[{i}] = {x[i]}') #x[0] = 0 #x[1] = 1 #x[2] = 4 #x[3] = 9 #x[4] = 16 #Traceback (most recent call last): # File "cf.py", line 8, in # print(f'x[{i}] = {x[i]}') #KeyError: 5 x 안에 없는 키(위의 경우, 5)를 가지고 불러오려고 하는 경우, KeyError가 발생하며 돌던 것이 죽어버린다. 그렇다면, 처음부터 안에 들어있는 key들..
[7, 17, ..., 87, 97]을 만들고 싶으면 어떻게 해야 할까? 1. 빈 리스트를 만들고 하나씩 더한다. l = [] for i in range(10): l.append(i*10+7) print(l) # [7, 17, 27, 37, 47, 57, 67, 77, 87, 97] 2. 리스트 컴프리헨션 l = [i*10+7 for i in range(10)] print(l) #[7, 17, 27, 37, 47, 57, 67, 77, 87, 97] 당장 가독성 측면에서 l에 값 하나씩 집어넣는 것보다 l을 이루고 있는 값이 어떻게 만들어졌는지 보는 편이 이해하기에 훨씬 수월한데다가, 코드를 작성하는 단계에서도 생각한 걸 더 바로 옮길 수 있고, 심지어 더 짧다.
문제 풀다가 멍청한 실수를 하고선 기록해둔다. 큰 수에 대해서, a//b의 결과와 int(a/b)의 다를 수 있는데, 이때 int(a/b)가 원하는 값을 리턴하지 않을 수 있다. 예를 들어, stackoverflow.com/a/56470206 링크에서 설명하듯이, - > int(755349677599789174/2) - > 377674838799894592 #wrong answer - > 755349677599789174 //2 - > 377674838799894587 #correct answer 이런 식의 문제가 발생할 수 있으니, 주의할 것. 나중에 시간 되면 문제 발생 이유도 정리하고, 두 계산에 걸리는 시간 비교도 해볼 예정이다.