2023. 3. 14. 13:33ㆍ코딩테스트
- 리스트
생성방법
List_name = []
List_name = [1,2,3]
List_name = list() #빈리스트만 반환
List Comprehension(리스트 함축)
List_name =[x for i in range(10)]
list의 인덱스
문자열과 같다. 0부터 시작하며 n-1까지 한다(n은 len(List_name)으로 리스트의 길이)
a = [1,2,3,4,5] # list는 a[0]~a[4]까지이다.
음수인덱스
a = [1,2,3,4,5] # list는 a[-5]~a[-1]까지이다. 즉 [-n]~[-1]이다.
list원소추가
a=[1,2,3,4,5]
- append 그냥 뒤에 추가 → 무엇을 추가할지에 대한 1가지 정보가 필요
- ex)a.append(”apple”) # [1,2,3,4,5,”apple”]
- insert 원하는 위치에 추가 → 어디에 & 무엇을 이렇게 2가지 정보가 필요
- ex)a.insert(3,”banana”)#[1,2,3,”banana”,4,5,”apple”]
list 원소삭제
- pop 위치를 기반으로 삭제
- ex)a.pop(1)#[1,3,”banana”,4,5,”apple”]
- remove 값을 기반으로 삭제
- ex)a.remove(1)#[3,”banana”,4,5,”apple”]
list 메서드
clear()#list 내 모든 항목 삭제
count() # 전달된 항목의 개수 반환
reverse()#역순으로 뒤집는다, list_name=list_name[::-1]로도 가능
copy()#리스트 복사본 반환
index()#list_name.index(”value”)와 같이 value 값이 있는 index 반환
list_name.sort() #리스트 정렬
+헷갈리기 쉬운 sort, sorted 차이점
https://hi-datalab.tistory.com/35
list 관련 연산
sorted(list)#리스트 정렬
len(list_name) #리스트 길이 반환
a in list # list 내에 a가 있으면 true 반환
a not in list #list 내에 a가 없으면 true 반환
zip(list1, list2)#for a,b in zip(list1, list2):로 할때 a,b = list1[n], list2[n] 로 할당연산으로 나온다.
list 사용가능한 내장함수
round()
reduce()
sum()
ord()
cmp()
max()
min()
all()
any()
len()
enumerate()
accumulate()
filter()
map()
+) random 모듈
ex) ramdom.choic(list)
- 리스트 병합
- +, list1.extend(list2)
깊은 복사 얕은 복사
a- 2198665297856
b- 2198665297856
a- 2198665297856
b- 2198665297472
리스트 변경
list_name=[1,2,3,4,5]
list_name[0]=100
#list_name=[100,2,3,4,5]
함수 매개변수 전달(변수 vs 리스트)
변수
param = 3 , param_id = 140719796266864
a = 100 , a_id = 140719796269968
리스트
param = [100, 2, 3, 4, 5] , param_id = 2710622936128
a = [100, 2, 3, 4, 5] , a_id = 2710622936128
즉 변수는 매개변수로 전달될 때 새로운 주소를 갖지만 리스트는 참조한다. call by value, call by reference
2차원 리스트
2dlist = [
[1,2,3],
[4,5,6],
[7,8,9]
]
print(2dlist[0][0], 2dlist[0][1], 2dlist[0][1])
print(2dlist[1][0], 2dlist[1][1], 2dlist[1][1])
print(2dlist[2][0], 2dlist[2][1], 2dlist[2][1])
1 2 3
4 5 6
7 8 9
2차원 리스트 생성
2dlist = []
for row in range(2):
2dlist+=[[1]*3]
#2dlist → [[1,1,1][1,1,1]]
2차원 리스트 함축(List Comprehension)
[i for i range(5) for _ in range(3))
#[[0,1,2,3,4],[0,1,2,3,4],[0,1,2,3,4]]
튜플
list와 거의 비슷하지만 변경이 불가능한 자료구조
선언 방법
tup=(”hi”,)#(”hi”)로 하면 일반 string 문자열 취급
tup=(”hi”,”my_name”,”is”,”tuple”)
tup[0]="hello" # error 변경이 안됨
#다만 튜플끼리의 병합은 가능
tup3=tup1+tup2
튜플을 왜 쓸까?
- 변경 불가 객체이기 때문에 처리 속도가 빠름자료구조 시간복잡도 참고문헌 링크
- 자료구조 공부할 때 배웠듯 자료구조 합치고 병합할 때 처리 속도가 꽤 있기 때문
- 리스트 → 딕셔너리 키로 사용 X, 튜플 → 딕셔너리 키로 사용 O
- ex) tuple
어떻게 활용할까?
tup_to_list = list(tup) # tup 자료형 list로 변환
tup_to_list[0]="hello"
tup = tuple(tup_to_list)#list -> tuple 자료형 변환
세트
특징 : 순서X, 위치별로 액세스X, 중복된 value X
선언 방법 set_name = {1,2,3}
set에서 활용 가능한 내장함수
all()
any()
enumerate()
len()
max()
min()
sorted()
sum()
요소 추가 메서드
set_name.add(”value”)
요소 삭제 메서드
set_name.remove(”value”)
합집합, 차집합, 교집합 가능 (순서대로 | , - , & )
딕셔너리
dict_name= {key1:value1, key2:value2} 의 형태로 key에 대응되는 value가 존재.
딕셔너리의 key는 유일해야하며 중복일 시 마지막 키에 대응되는 value가 들어간다.
#key에 대응하는 value 탐색
print(dict_name[key1])
#value1
#key값에 맞는 value 변경, 없으면 key-value삽입
dict_name[key2]=value2
#dict_name= {key1:value1, key2:value2}
#요소 삭제
dict_name.pop(key1)
ex_dict={1: 'hello1', 2: 'hello2', 3: 'hello3'}
print(type(ex_dict), ex_dict)
print(type(ex_dict.keys()),ex_dict.keys())
print(type(ex_dict.items()), ex_dict.items() )
#<class 'dict'> {1: 'hello1', 2: 'hello2', 3: 'hello3'}
#<class 'dict_keys'> dict_keys([1, 2, 3])
#<class 'dict_items'> dict_items([(1, 'hello1'), (2, 'hello2'), (3, 'hello3')])
#print(ex_dict.keys()) -> dict_keys([1, 2, 3]) 가 보기 싫다면?
list(ex_dict.keys())#list로 형변환
그외 딕셔너리 메서드, 내장함수
dict_name.get(key,defalut)
len(dict_name)
k i in dict_name
k i not in dict_name
등
딕셔너리 함축
예시 : dic ={ x : “A”*x for x in values if x%3==0 }
문자열 관련 함수
chr(67) → “a”
ord(”A”) → 67
str(1) → “1”
.endswith(end_string, start_index, end_index) #끝 문자열 찾기
.startswith(start_string, start_index) #첫 문자열 찾기
.find(str) # str의 index 찾기
.replace(src_str,dst_str) # 문자열 바꾸기
.strip(str)#문자열 제거, lstrip, rstrip도 있음
.split(str)#str 기준으로 문자열 분해하여 list 로 만듦
str.join(list)#list의 값 사이에 str을 붙여 결합
- 리스트
생성방법
List_name = []
List_name = [1,2,3]
List_name = list() #빈리스트만 반환
List Comprehension(리스트 함축)
List_name =[x for i in range(10)]
list의 인덱스
문자열과 같다. 0부터 시작하며 n-1까지 한다(n은 len(List_name)으로 리스트의 길이)
a = [1,2,3,4,5] # list는 a[0]~a[4]까지이다.
음수인덱스
a = [1,2,3,4,5] # list는 a[-5]~a[-1]까지이다. 즉 [-n]~[-1]이다.
list원소추가
a=[1,2,3,4,5]
- append 그냥 뒤에 추가 → 무엇을 추가할지에 대한 1가지 정보가 필요
- ex)a.append(”apple”) # [1,2,3,4,5,”apple”]
- insert 원하는 위치에 추가 → 어디에 & 무엇을 이렇게 2가지 정보가 필요
- ex)a.insert(3,”banana”)#[1,2,3,”banana”,4,5,”apple”]
list 원소삭제
- pop 위치를 기반으로 삭제
- ex)a.pop(1)#[1,3,”banana”,4,5,”apple”]
- remove 값을 기반으로 삭제
- ex)a.remove(1)#[1,”banana”,4,5,”apple”]
list 메서드
clear()#list 내 모든 항목 삭제
count() # 전달된 항목의 개수 반환
reverse()#역순으로 뒤집는다, list_name=list_name[::-1]로도 가능
copy()#리스트 복사본 반환
index()#list_name.index(”value”)와 같이 value 값이 있는 index 반환
list_name.sort() #리스트 정렬
+헷갈리기 쉬운 sort, sorted 차이점
https://hi-datalab.tistory.com/35
list 관련 연산
sorted(list)#리스트 정렬
len(list_name) #리스트 길이 반환
a in list # list 내에 a가 있으면 true 반환
a not in list #list 내에 a가 없으면 true 반환
zip(list1, list2)#for a,b in zip(list1, list2):로 할때 a,b = list1[n], list2[n] 로 할당연산으로 나온다.
list 사용가능한 내장함수
round()
reduce()
sum()
ord()
cmp()
max()
min()
all()
any()
len()
enumerate()
accumulate()
filter()
map()
+) random 모듈
ex) ramdom.choic(list)
- 리스트 병합
- +, list1.extend(list2)
깊은 복사 얕은 복사
a- 2198665297856
b- 2198665297856
a- 2198665297856
b- 2198665297472
리스트 변경
list_name=[1,2,3,4,5]
list_name[0]=100
#list_name=[100,2,3,4,5]
함수 매개변수 전달(변수 vs 리스트)
변수
param = 3 , param_id = 140719796266864
a = 100 , a_id = 140719796269968
리스트
param = [100, 2, 3, 4, 5] , param_id = 2710622936128
a = [100, 2, 3, 4, 5] , a_id = 2710622936128
즉 변수는 매개변수로 전달될 때 새로운 주소를 갖지만 리스트는 참조한다. call by value, call by reference
2차원 리스트 → 추후 자세히 기술
2dlist = [
[1,2,3],
[4,5,6],
[7,8,9]
]
print(2dlist[0][0], 2dlist[0][1], 2dlist[0][1])
print(2dlist[1][0], 2dlist[1][1], 2dlist[1][1])
print(2dlist[2][0], 2dlist[2][1], 2dlist[2][1])
1 2 3
4 5 6
7 8 9
2차원 리스트 생성
2dlist = []
for row in range(2):
2dlist+=[[1]*3]
#2dlist → [[1,1,1][1,1,1]]
2차원 리스트 함축(List Comprehension)
[i for i range(5) for _ in range(3))
#[[0,1,2,3,4],[0,1,2,3,4],[0,1,2,3,4]]
튜플
list와 거의 비슷하지만 변경이 불가능한 자료구조
선언 방법
tup=(”hi”,)#(”hi”)로 하면 일반 string 문자열 취급
tup=(”hi”,”my_name”,”is”,”tuple”)
tup[0]="hello" # error 변경이 안됨
#다만 튜플끼리의 병합은 가능
tup3=tup1+tup2
튜플을 왜 쓸까?
- 변경 불가 객체이기 때문에 처리 속도가 빠름자료구조 시간복잡도 참고문헌 링크
- 자료구조 공부할 때 배웠듯 자료구조 합치고 병합할 때 처리 속도가 꽤 있기 때문
- 리스트 → 딕셔너리 키로 사용 X, 튜플 → 딕셔너리 키로 사용 O
- ex) tuple
어떻게 활용할까?
tup_to_list = list(tup) # tup 자료형 list로 변환
tup_to_list[0]="hello"
tup = tuple(tup_to_list)#list -> tuple 자료형 변환
세트
특징 : 순서X, 위치별로 액세스X, 중복된 value X
선언 방법 set_name = {1,2,3}
set에서 활용 가능한 내장함수
all()
any()
enumerate()
len()
max()
min()
sorted()
sum()
요소 추가 메서드
set_name.add(”value”)
요소 삭제 메서드
set_name.remove(”value”)
합집합, 차집합, 교집합 가능 (순서대로 | , - , & )
딕셔너리
dict_name= {key1:value1, key2:value2} 의 형태로 key에 대응되는 value가 존재.
딕셔너리의 key는 유일해야하며 중복일 시 마지막 키에 대응되는 value가 들어간다.
#key에 대응하는 value 탐색
print(dict_name[key1])
#value1
#key값에 맞는 value 변경, 없으면 key-value삽입
dict_name[key2]=value2
#dict_name= {key1:value1, key2:value2}
#요소 삭제
dict_name.pop(key1)
ex_dict={1: 'hello1', 2: 'hello2', 3: 'hello3'}
print(type(ex_dict), ex_dict)
print(type(ex_dict.keys()),ex_dict.keys())
print(type(ex_dict.items()), ex_dict.items() )
#<class 'dict'> {1: 'hello1', 2: 'hello2', 3: 'hello3'}
#<class 'dict_keys'> dict_keys([1, 2, 3])
#<class 'dict_items'> dict_items([(1, 'hello1'), (2, 'hello2'), (3, 'hello3')])
#print(ex_dict.keys()) -> dict_keys([1, 2, 3]) 가 보기 싫다면?
list(ex_dict.keys())#list로 형변환
그외 딕셔너리 메서드, 내장함수
dict_name.get(key,defalut)
len(dict_name)
k i in dict_name
k i not in dict_name
등
딕셔너리 함축
예시 : dic ={ x : “A”*x for x in values if x%3==0 }
문자열 관련 함수
chr(67) → “a”
ord(”A”) → 67
str(1) → “1”
.endswith(end_string, start_index, end_index) #끝 문자열 찾기
.startswith(start_string, start_index) #첫 문자열 찾기
.find(str) # str의 index 찾기
.replace(src_str,dst_str) # 문자열 바꾸기
.strip(str)#문자열 제거, lstrip, rstrip도 있음
.split(str)#str 기준으로 문자열 분해하여 list 로 만듦
str.join(list)#list의 값 사이에 str을 붙여 결합
- 리스트
생성방법
List_name = []
List_name = [1,2,3]
List_name = list() #빈리스트만 반환
List Comprehension(리스트 함축)
List_name =[x for i in range(10)]
list의 인덱스
문자열과 같다. 0부터 시작하며 n-1까지 한다(n은 len(List_name)으로 리스트의 길이)
a = [1,2,3,4,5] # list는 a[0]~a[4]까지이다.
음수인덱스
a = [1,2,3,4,5] # list는 a[-5]~a[-1]까지이다. 즉 [-n]~[-1]이다.
list원소추가
a=[1,2,3,4,5]
- append 그냥 뒤에 추가 → 무엇을 추가할지에 대한 1가지 정보가 필요
- ex)a.append(”apple”) # [1,2,3,4,5,”apple”]
- insert 원하는 위치에 추가 → 어디에 & 무엇을 이렇게 2가지 정보가 필요
- ex)a.insert(3,”banana”)#[1,2,3,”banana”,4,5,”apple”]
list 원소삭제
- pop 위치를 기반으로 삭제
- ex)a.pop(1)#[1,3,”banana”,4,5,”apple”]
- remove 값을 기반으로 삭제
- ex)a.remove(1)#[1,”banana”,4,5,”apple”]
list 메서드
clear()#list 내 모든 항목 삭제
count() # 전달된 항목의 개수 반환
reverse()#역순으로 뒤집는다, list_name=list_name[::-1]로도 가능
copy()#리스트 복사본 반환
index()#list_name.index(”value”)와 같이 value 값이 있는 index 반환
list_name.sort() #리스트 정렬
+헷갈리기 쉬운 sort, sorted 차이점
https://hi-datalab.tistory.com/35
list 관련 연산
sorted(list)#리스트 정렬
len(list_name) #리스트 길이 반환
a in list # list 내에 a가 있으면 true 반환
a not in list #list 내에 a가 없으면 true 반환
zip(list1, list2)#for a,b in zip(list1, list2):로 할때 a,b = list1[n], list2[n] 로 할당연산으로 나온다.
list 사용가능한 내장함수
round()
reduce()
sum()
ord()
cmp()
max()
min()
all()
any()
len()
enumerate()
accumulate()
filter()
map()
+) random 모듈
ex) ramdom.choic(list)
- 리스트 병합
- +, list1.extend(list2)
깊은 복사 얕은 복사
a- 2198665297856
b- 2198665297856
a- 2198665297856
b- 2198665297472
리스트 변경
list_name=[1,2,3,4,5]
list_name[0]=100
#list_name=[100,2,3,4,5]
함수 매개변수 전달(변수 vs 리스트)
변수
param = 3 , param_id = 140719796266864
a = 100 , a_id = 140719796269968
리스트
param = [100, 2, 3, 4, 5] , param_id = 2710622936128
a = [100, 2, 3, 4, 5] , a_id = 2710622936128
즉 변수는 매개변수로 전달될 때 새로운 주소를 갖지만 리스트는 참조한다. call by value, call by reference
2차원 리스트 → 추후 자세히 기술
2dlist = [
[1,2,3],
[4,5,6],
[7,8,9]
]
print(2dlist[0][0], 2dlist[0][1], 2dlist[0][1])
print(2dlist[1][0], 2dlist[1][1], 2dlist[1][1])
print(2dlist[2][0], 2dlist[2][1], 2dlist[2][1])
1 2 3
4 5 6
7 8 9
2차원 리스트 생성
2dlist = []
for row in range(2):
2dlist+=[[1]*3]
#2dlist → [[1,1,1][1,1,1]]
2차원 리스트 함축(List Comprehension)
[i for i range(5) for _ in range(3))
#[[0,1,2,3,4],[0,1,2,3,4],[0,1,2,3,4]]
튜플
list와 거의 비슷하지만 변경이 불가능한 자료구조
선언 방법
tup=(”hi”,)#(”hi”)로 하면 일반 string 문자열 취급
tup=(”hi”,”my_name”,”is”,”tuple”)
tup[0]="hello" # error 변경이 안됨
#다만 튜플끼리의 병합은 가능
tup3=tup1+tup2
튜플을 왜 쓸까?
- 변경 불가 객체이기 때문에 처리 속도가 빠름자료구조 시간복잡도 참고문헌 링크
- 자료구조 공부할 때 배웠듯 자료구조 합치고 병합할 때 처리 속도가 꽤 있기 때문
- 리스트 → 딕셔너리 키로 사용 X, 튜플 → 딕셔너리 키로 사용 O
- ex) tuple
어떻게 활용할까?
tup_to_list = list(tup) # tup 자료형 list로 변환
tup_to_list[0]="hello"
tup = tuple(tup_to_list)#list -> tuple 자료형 변환
세트
특징 : 순서X, 위치별로 액세스X, 중복된 value X
선언 방법 set_name = {1,2,3}
set에서 활용 가능한 내장함수
all()
any()
enumerate()
len()
max()
min()
sorted()
sum()
요소 추가 메서드
set_name.add(”value”)
요소 삭제 메서드
set_name.remove(”value”)
합집합, 차집합, 교집합 가능 (순서대로 | , - , & )
딕셔너리
dict_name= {key1:value1, key2:value2} 의 형태로 key에 대응되는 value가 존재.
딕셔너리의 key는 유일해야하며 중복일 시 마지막 키에 대응되는 value가 들어간다.
#key에 대응하는 value 탐색
print(dict_name[key1])
#value1
#key값에 맞는 value 변경, 없으면 key-value삽입
dict_name[key2]=value2
#dict_name= {key1:value1, key2:value2}
#요소 삭제
dict_name.pop(key1)
ex_dict={1: 'hello1', 2: 'hello2', 3: 'hello3'}
print(type(ex_dict), ex_dict)
print(type(ex_dict.keys()),ex_dict.keys())
print(type(ex_dict.items()), ex_dict.items() )
#<class 'dict'> {1: 'hello1', 2: 'hello2', 3: 'hello3'}
#<class 'dict_keys'> dict_keys([1, 2, 3])
#<class 'dict_items'> dict_items([(1, 'hello1'), (2, 'hello2'), (3, 'hello3')])
#print(ex_dict.keys()) -> dict_keys([1, 2, 3]) 가 보기 싫다면?
list(ex_dict.keys())#list로 형변환
그외 딕셔너리 메서드, 내장함수
dict_name.get(key,defalut)
len(dict_name)
k i in dict_name
k i not in dict_name
등
딕셔너리 함축
예시 : dic ={ x : “A”*x for x in values if x%3==0 }
문자열 관련 함수
chr(67) → “a”
ord(”A”) → 67
str(1) → “1”
.endswith(end_string, start_index, end_index) #끝 문자열 찾기
.startswith(start_string, start_index) #첫 문자열 찾기
.find(str) # str의 index 찾기
.replace(src_str,dst_str) # 문자열 바꾸기
.strip(str)#문자열 제거, lstrip, rstrip도 있음
.split(str)#str 기준으로 문자열 분해하여 list 로 만듦
str.join(list)#list의 값 사이에 str을 붙여 결합
전역변수
x = 100 # 전역변수
def func_name(param):
y=200 #지역변수
gloval z = 300 #전역변수
code
언패킹(*, **)
list_name= [1,2,3,4,5]
print(*list_name)
print(list_name)
#1 2 3 4 5
#[1, 2, 3, 4, 5]
str1="hello"
print(*str1)
print(str1)
#h e l l o
#hello
def personal_info(name, age, address):
print('이름: ', name)
print('나이: ', age)
print('주소: ', address)
x = {'name': '홍길동', 'age': 30, 'address': '서울시 용산구 이촌동'}
personal_info(**x)
#이름: 홍길동
#나이: 30
#주소: 서울시 용산구 이촌동
https://dojang.io/mod/page/view.php?id=2347
https://www.golinuxcloud.com/python-tuple/
'코딩테스트' 카테고리의 다른 글
[백준]2차원 행렬문제 2738, 2566, 10798, 2563 (0) | 2023.03.30 |
---|---|
[python]코딩테스드 독학 기초 3편 (0) | 2023.03.15 |
[python] 코딩테스트 독학 기초 1편 (1) | 2023.03.14 |