[python] 코딩테스트 독학 기초 2편

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)

1차원 리스트 함축

[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

튜플을 왜 쓸까?

  1. 변경 불가 객체이기 때문에 처리 속도가 빠름자료구조 시간복잡도 참고문헌 링크
  2. 자료구조 공부할 때 배웠듯 자료구조 합치고 병합할 때 처리 속도가 꽤 있기 때문
  3. 리스트 → 딕셔너리 키로 사용 X, 튜플 → 딕셔너리 키로 사용 O
  4. 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)

1차원 리스트 함축

[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

튜플을 왜 쓸까?

  1. 변경 불가 객체이기 때문에 처리 속도가 빠름자료구조 시간복잡도 참고문헌 링크
  2. 자료구조 공부할 때 배웠듯 자료구조 합치고 병합할 때 처리 속도가 꽤 있기 때문
  3. 리스트 → 딕셔너리 키로 사용 X, 튜플 → 딕셔너리 키로 사용 O
  4. 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)

1차원 리스트 함축

[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

튜플을 왜 쓸까?

  1. 변경 불가 객체이기 때문에 처리 속도가 빠름자료구조 시간복잡도 참고문헌 링크
  2. 자료구조 공부할 때 배웠듯 자료구조 합치고 병합할 때 처리 속도가 꽤 있기 때문
  3. 리스트 → 딕셔너리 키로 사용 X, 튜플 → 딕셔너리 키로 사용 O
  4. 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/