Open jeeyeonLIM opened 3 years ago
key = lambda
를 활용하면 다양한 형태의 정렬을 수행할 수 있다. reverse=True
를 잊지 말자!
sorted(List, key=lambda x:len(x)) # List의 원소 x의 길이에 따라 정렬
List.sort(key= lambda x:x['name'], reverse=True)
List.sort(key= len) # 간단히 이렇게만 써줘도 가능!!
![image](https://user-images.githubusercontent.com/45617225/106143902-c57a4980-61b6-11eb-9b29-c4a44acf3ba1.png)
#### 관련 문제
- [K번째 수](#1 )
- [가장 큰 수](#8 ) : 혼자 못풀었어서 다시 풀어보기
- [H-index](#39 ) : 아직 못함...
# [1,2,3]이런 list 내 원소를 일괄적으로 chr 로 바꾸고 싶을 때
list(map(str, [1,2,3] ))
"1234".isalpha(), "1234".isdigit() # (False, True)
#### 정규식 !!
- 정규식 관련 메타문자는 총 12개다. 👉 `$()*+.?[\^{|`
#### match
```python
import re
p=re.compile('[a-z]+') # copile 메서드엔 내가 찾고 싶은 정규식 pattern 입력해주기.
m= p.match("python") # 문자열 처음부터 정규식과 매치되는지 조사
if m: # 만약 일치하는 게 있다면 match객체를 돌려줄테고, 해당 if문이 실행된다.
print(m.group())
else:
print("No")
import re
p=re.compile('[a-z]+') # copile 메서드엔 내가 찾고 싶은 정규식 pattern 입력해주기.
s=p.search("3 python")
s=
import re
re.match('a', 'abc')
# re.match(patter, string, flags) : 문자열 처음부터 시작해서 일치하는 내용 찾기. 만약 일치하면 match object값을, 일치하지 않으면 None값
re.search(pattern, string, flags)
# re.match와 비슷하지만, 반드시 문자열 처음부터 일치해야 하는 것은 아니다.
re.findall(pattern, string, flags)
# 패턴과 일치되는 모든 부분을 찾는다.
re.fullmatch(pattern, string, flags)
# 패턴과 문자열이 남는 부분 없이 완벽히 일치되는가를 확인함!! 즉 pattern == string일 경우만 Match obj 반환함.
# slicing
mylist[::-1] # 문자열 뒤집기
mylist[0::2] # 홀수번째 문자열만(총 세개의 인자를 넣을 수 있는데 0번째 index부터 끝까지 추출하는데 2간격으로 뛰면서 나오도록 하는 의미.
mylist[1::2] # 짝수번째 문자열만
# 문자 검사
mylist.isalpha() # 문자열이 알파벳으로만 이루어져있는 것인지 확인할 수 있음.
mylist.isalnum() # alnum = alpha + numeric인지 검사. 즉 문자열이 알파벳과 숫자로만 이루어져 있는지 검사할 수 있음.
mylist.islower() # 문자열이 모두 소문자인지 검사함.
mylist.isupper() # 문자열이 모두 대문자인지 검사함.
# 숫자검사
mylist.isnumeric()
# 문자열 양식 변경
mylist.upper() #대문자로 변경
mylist.lower() #소문자로 변경
mylist.capitalize() # 첫글자만 대문자로 변경
# 문자 검색하기
mylist.index('m')
mylist.find('m')
# 참고 mylist.index('m', 4) 이렇게 사용하면 mylist의 4번째 자리부터 'm'이 있는지 검사함.
# index, find 함수 모두 m이라는 문자가 몇 번째 index에 위치하는지 알 수 있음.
# 단, 두 함수간의 차이는 find는 해당 문자가 없으면 -1을 반환하고, index는 error를 반환한다.
# 문자열 다듬기
mylist.lstrip # 왼쪽 공백 제거
mylist.rstrip # 오른쪽 공백 제거
mylist.strip # 양쪽 공백 제거
# 전화번호 목록 문제에서 Ver2. 정통 Hash를 이용한 방법 중 하나이다.
hash_map = {} # dict 선언
hash_map[지정할key] = 할당할value
d={'one':'하나','two':'둘'} d.keys() d.values() d.items() # zip에서와 같은 방식~!
#### 예제
- strings값이 들어올 때 알파벳이 몇개씩 있는지를 보여주는 hash를 작성해보자.
```python
def solution(strings):
hash_map={} # 해시맵 만들거야
for string in strings:
# key값에 string 값이 없으면 새로 지정해서 넣어주기
if string not in hash_map.keys():
hash_map[string]=1
# key값에 이미 들어와 있더라면 value에 +1
else:
hash_map[string] += 1
return hash_map
이름 | 조작 | SQL |
---|---|---|
Create | 생성 | INSERT |
Read | 읽기 | SELECT |
Update | 갱신 | UPDATE |
Delete | 삭제 | DELETE |
# 값 생성하기
SELECT * FROM Mytable ORDER BY a1; # 먼저 Mytable이 어떤 변수값을 포함하는지 확인해준다
INSERT INTO Mytable VALUES ('jeeyeon', 'LIM', 'DJ') # 각각 a1, a2, a3 변수에 포함될 값을 적어준다.
# 아래는 테이블 생성 예시
CREATE TABLE PLAYER (
PLAYER_ID CHAR(7) NOT NULL,
PLAYER_NAME VARCHAR2(20) NOT NULL,
TEAM_ID CHAR(3) NOT NULL,
E_PLAYER_NAME VARCHAR2(40),
NICKNAME VARCHAR2(30),
CONSTRAINT PLAYER_PK PRIMARY KEY (PLAYER_ID),
CONSTRAINT PLAYER_FK FOREIGN KEY (TEAM_ID) REFERENCES TEAM(TEAM_ID)
);
# 출처: https://hyeonstorage.tistory.com/291 [개발이 하고 싶어요]
DATE_FORMAT(STR_TO_DATE(date_char, '%Y%m%d'),'%Y-%m-%d ') # char 형태를 date 형태의 포맷으로 변환하기
DATE_ADD(날짜, INTERVAL 1 YEAR)
DATE_ADD(날짜, INTERVAL 1 MONTH)
DATE_ADD(날짜, INTERVAL 1 DAY)
DATE_ADD(날짜, INTERVAL 1 HOUR)
DATE_ADD(날짜, INTERVAL 1 MINUTE)
DATE_ADD(날짜, INTERVAL 1 SECOND)
DATE_SUB(날짜, INTERVAL 2 YEAR)
DATEDIFF(날짜2, 날짜1) # 날짜1 < 날짜2 TIMESTAMPDIFF(WEEK, 날짜1, 날짜2) #DAY, MONTH, YEAR,... 변환 가능!
dayname('2019-01-01')
date_part('year',concat_ws('-',substr(dt,1,4),substr(dt,5,2),substr(dt,7,2))) as years
from_timestamp(date_trunc('week',concat_ws('-',substr(dt,1,4),substr(dt,5,2),substr(dt,7,2))),'yyyy-MM-dd' ) as stdt
RANK() OVER(partition by 변수명, order by)
where 변수명 regexp '검사할문자1|검사할문자2'
cast(문자변수 as char) # 형변환 함수 cast 숫자변수 -> 문자변환 coalesce(변수명, null을 대체할 값) # if(변수명 is null, null대체값, 변수명) 과 같음. lag(변수명,1) over(partition by 나눌 변수 )
#### 3. Update
```sql
UPDATE 테이블명 SET 변수명 = '값' WHERE 조건 # 특정 조건에 해당하는 변수의 값을 변경
DELETE FROM 테이블명; # 테이블 전체 삭제
DELETE FROM 테이블명 WHERE 조건 # 조건에 해당하는 row문 삭제
# dir(l)
# 'append', # 하나의 요소 추가
# 'clear', # 모든 요소를 없애기
# 'copy', # 리스트를 function으로 넘길 때 복사함.
# 'count', # 갯수 세주기
# 'extend', # 요소 한번에 많이 추가할 때
# 'index', # 요소 찾을 때
# 'insert', # 해당되는 자리에 요소 넣을 때
# 'pop', # 뒤에서 값을 꺼낼 때
# 'remove', # 요소의 값을 지울 때! 속도가 O(n)이므로 del로 지우는 것이 더 좋음.
# 'reverse',# 역순
# 'sort' # 정렬
# try: 실행할 코드 except:예외발생시(에러 발생시) 실행할 코드
# 예시 : 예를들면
# append + pop
l=[]
l.append(10)
l.append(20)
l.append(30)
# 큐와 스택 방식
l.pop(0) # 0번째 index 추출 ! 큐의 구조~! (10값 빼줌)
l.pop() # 가장 늦게 들어온 애를 추출# stack의 구조
l
### 해시맵 유용한 관련한 예제~ ! ###
#Q. 문자열로 쪼개진 것을 어떻게 숫자형으로 바꿀 수 있을까?
# method1
[int(i) for i in '1 2 3 4 5 6 7'.split() ]
# method2 - map의 function을 int로 주기!!!!
list(map(int,'1 2 3 4 5 6 7'.split() ))
# sorted는 return 값을 내주는 것.
testCase1=['abc','def','hello world', 'hello', 'python']
testCase2='Life is too short, You need python'.split()
testCase3=list(zip('anvfe',[1,3,2,4,5]))
sorted(testCase1, key=len, reverse=True) # 길이 순으로 정렬, 역순
sorted(testCase2, key=str.lower) # 대소문자 구별 없이 맨 앞 알파벳 순으로 정렬됨.
sorted(testCase3, key= lambda x: x[1]) # 두번째 원소 기준 정렬
### 이렇게 list 내 tuple 형태일 때 dictionary 정렬하고 싶을 때 사용하기 유용함!!!
# 반면, sort는 list를 직접 정렬로 바꿔주는 것임.
l=[10,4,5,3,6,7]
l.sort()
print(l)
d={'one':'하나','two':'둘'}
d.keys()
d.values()
d.items() # zip에서와 같은 방식~!
### 해시맵 유용한 관련한 예제~ ! ###
# 단톡방에 x마리의 동물이 대화를 하고 있다.
# 각각 동물들이 톡을 전송할 때마다 서버에는 아래와 같이 저장된다.
serverData='개리 라이캣 개리 개리 라이캣 자바독 자바독 파이 썬'
# 1. 단톡방에는 모두 몇마리 동물이 있나? (톡은 무조건 1회 이상 전송함)
len(set(serverData.split()))
# 2. 단톡방에 동물들마다 몇 번의 톡을 올렸을까?
hashmap={}
for i in set(serverData.split()):
hashmap[i] = serverData.split().count(i)
hashmap
# set :중복 제거 용도로 활용할 수 있음. but 순서가 없다.
# issue5. 참고
s=set('111223455677')
s
# 집합연산
#dir(s)
# 'add',
# 'clear',
# 'copy',
# 'difference', # 차집합집합1.different(집합2번째)
# 'difference_update',
# 'discard',
# 'intersection',
# 'intersection_update',
# 'isdisjoint',
# 'issubset',
# 'issuperset',
# 'pop',
# 'remove',
# 'symmetric_difference',
# 'symmetric_difference_update',
# 'union', # 합집합
# 'update' # 한꺼번에 많은 데이터를 추가
s.add(7)
s.discard(7)
'1' in s
판콜에이 = {'A','B','C'}
타이레놀 = {'A','B','D'}
print(판콜에이.difference(타이레놀)) # 차집합. 판콜에이-타이레놀
print(판콜에이.intersection(타이레놀)) # 교집합
print(len(판콜에이.intersection(타이레놀))) # 같은 원소의 갯수를 구해라.
print(판콜에이.union(타이레놀))
# 일반 함수 - 숫자
abs(-3) # 절대값
all([1,2,3]) # 모든 값이 참이면 True, 하나라도 거짓이면 False
all([0,1,2,3]) # 이건 False !
any([1,2,3]) # 하나라도 참이 있으면 True, 모두가 거짓일 경우 False
dir([1,2,3,4]) # list metod 검색할 수 있음!
# format(숫자, 원하는 형식)
format(1000000000, ',') # 원(\)표시
format(1000000000, 'e') # 지수 표현
format(1000000000, 'x') # 소문자 표현
# filter(함수, 적용할 요소)
# Methdod1
def jy(value):
if value %2 ==0:
return value
else:
return None
M1=list(filter(jy, range(20)))
# Method2
M2= list(filter(lambda x: x%2 ==0 , range(20)))
# zip : 묶어주기
list(zip(['a','b','c','d'],[1,2,3,4],[10,20,30,40],'ABCD'))
# [('a', 1, 10, 'A'), ('b', 2, 20, 'B'), ('c', 3, 30, 'C'), ('d', 4, 40, 'D')]
우선순위 점검
💡 중요도 순으로 정리 & 문풀
기타
마인드셋