[혼공학습단 9기] 3회차 미션

김종민·2023년 1월 24일
0

-수열
숫자의 일렬 나열
a=(1,2,3,4)
ch1. 항:수열의 요소 , N번째 항
ch2. 길이:수열 요소의 수, N개
ch.3 길이가 유한할 경우, 유한 수열, 무한일 경우 무한 수열

-배열
자료의 나열
[10, 10.0, "가나다", True]
파이썬은 0 인덱스로, 인덱스 순서를 셈
서수(순서)의 경우 0부터, 기수(개수)의 경우 1부터 시작함
길이가 고정되어 있음

-리스트
배열+ 요소의 추가/제거가 가능함
a=[123, "abc", True]
a[0] = 123
a[0:2]=123, 'abc'
일정 범위만 구하는 슬라이싱, a[-1]or a[-2] 등의 오른쪽에서의 선택도 가능
len(a) = a의 길이(기수)
a[::-1] = [True, "abc", 123] # 리스트 반대로 돌리기
b= [a,a,a] -> b=[[123, "abc", True],[123, "abc", True],[123, "abc", True]] #중첩 가능

-리스트의 요소 추가, 제거, 정렬, 존재 확인
(1) 요소 추가: append(), insert(), extend() -> 이들은 파괴적 연산
a= [1,2,3,4]
a.append(10) # 가장 마지막에 요소를 하나 추가
a.insert(0, 20) #0 번째 순서에 20을 추가
a.extend([5,6,7,8]) # 5,6,7,8을 인덱스에 추가
(2) 요소 제거: del, pop(), remove(), clear() -> 이들은 파괴적 연산
del a[] #제거하고 싶은 인덱스 입력
a.pop() #제거하고 싶은 인덱스 입력(기본값 -1)
a.remove() #제거하고 싶은 요소(값)를 입력
a.clear() #모든 요소 제거
(3) 요소 정렬: sort() -> 이들은 파괴적 연산
a= [52,273,1,7,9,103,58,201]
a.sort() #오름차순으로 정렬
a.sort(reverse=True) #내림차순으로 정렬
(4) 요소 존재 확인: in, not in
52 in a #a 안에 52가 있는가?
0 in a #a 안에 0이 있는가?
52 not in a #a 안에 52가 없는가?
0 not in a ##a 안에 0이 있는가?

-항등원
임의의 원소에 특정 연산을 했을 때 다시 그 원소가 나오는(재귀하는) 원소
10+?=10
?=0
10*?=10
?=1
등등...

-for 반복문과 리스트
for 반복변수 in 리스트:
복합구문
반복변수:반복변수에 리스트의 값을 하나하나 차례대로 넣음
이름의 경우, i,j,k,m,n ....

-총합
sum=0 ->총합 변수 지정
for a_i in a:
sum=sum + a_i

-총곱
prod=1 ->총곱 변수 지정
for a_i in a:
prod=prod*a_i

-2차원 리스트
b= [[1,2,3], [4,5,6,7], [8,9]]

-중첩 반복문
for i in b:
print(i)
for j in i:
print(j)
,,,,,
즉, 차원이 다중적으로 존재하는 리스트의 경우, 중첩 반복문을 통해 각 리스트의 각 자료를 알 수 있음

-전개 연산자
★리스트 -> 요소,요소,요소
두 예
(1) 리스트 내부
a= [1,2,3]
b= [★a, ★a] = [1,2,3,1,2,3]
전개 연산자의 경우, append의 추가와 다른 점은 기존의 a의 리스트를 파괴하지 않음
즉, a와 b의 리스트를 각각 유지시킬 수 있음(비파괴적으로 사용 가능)

(2) 함수의 매개변수 위치
date=[2022,8,10,14,14]
"{}년 {}월 {}일 {}시 {}분".format(★date)로 사용 가능
즉, ★리스트로 각각에 입력 가능

-자릿수
자릿수의 경우, 숫자를 문자열str로 바꾼 후, len 사용
-주기적으로 반복되는 리스트 -> 나머지(%) 연산자 사용

-딕셔너리
리스트의 다양한 형태를 사전에 정하는 것
a= {
키1:값1,
키2:값2,
키3:값3,
}
a[키1]=값1 이 출력 된다
딕셔너리의 사용을 위해서는 키:값의 형태로 저장이 필요
키는 숫자, 문자열, 불, 튜플 등의 다양한 형태가 존재
값은 모든 것을 입력 가능
키와 값의 한 쌍 후에는 무조건 ,(쉼표)를 입력해 주어야 한다. 다만, 딕셔너리의 긑의 쉼표는 괜찮음
문자열의 경우, ""(따움표)로 감싸 주어야 한다. 또는 문자열에 해당하는 변수가 존재해야 함
이중 반복문을 통해 많은 키와 값을 정리할 수 있음
(다중 딕셔너리의 경우 대괄호로 묶는데, 상관이 없는가 ?)

-딕셔너리의 다양한 요소 변경, 추가, 제거, 키의 존재 확인, 값 가져오기
product={
"name": "7D 건조 망고"
"type": "당절임"
}

(1) 요소의 값 변경
product["name"]="8D 건조 망고"
(2) 요소 추가
product["price"]= 4000
(3) 요소 제거
del product"type" 키의 존재 확인
"price" in product #True or False
(5) 값 가져오기 get()
product.get("name")
product.get("price") --> 키에 대응하는 값이 없을 경우, None을 가져옴

-범위
특정 범위 내부의 정수를 나열하는 자료형
(1)range(A) # 0부터 A까지의 정수를 범위로 나열하며, A는 포함X
특정 횟수만큼 반복하는 반복문에서 사용된다
(2)range(A,B) # A부터 B까지의 정수를 범위로 나열하며, B는 포함 X
반복 변수의 범위를 지정하고 반복 변수를 사용할 경우 사용된다
(3)range(A,B,C) # A부터 B까지의 정수 범위 내에서 C만큼씩 건너뛰며 나열하며, B는 포함 X
반복 변수를 사용할 경우, 반대로 반복하기 위하여 사용된다
!!특정 범위의 강조를 위해서는 범위+-1을 사용한다!! # 10+1, 0-1 등
_(언더스코어) 또한 반복 변수로 사용 가능

-수학과 개발
수학와 프로그래밍에서의 첫번째 자료가 다름을 방지 위해, 첫 자료에 'None'을 추가하기도 함

-reversed()
리스트를 뒤집어 준다
reversed([1,2,3,4,5]) = [5,4,3,2,1]
반복을 거꾸로 할 경우, 사용하기도 한다

-while 반복문
while은 기본적으로 복합구문이며, 조건이 참이면 반복한다
for 반복문으로 사용할 수 없는 반복문일 때 사용
갯수가 아닌 시간과 특정 조건 반복에 사용

-break와 countinue 키워드
break의 경우 반복문을 탈출하기 위하여 사용
continue의 경우 반복문을 넘기기 위하여 사용

-최대/소값 구하기
for 반복문을 통해 현재 i의 값과 이전의 i를 비교하여, 현재 선택값이 더 클/작을 경우
파괴적 연산을 통해 이전의 i를 현재의 i로 변경

-딕셔너리에서 사용할 수 있는 다양한 기본 함수
(1) max(a) = 리스트 a 내 최대 값을 찾아 줌
(2) min(a) = 리스트 a 내 최소 값을 찾아 줌
max, min의 경우 max/min(1,2,3,4,5,6)으로도 사용 가능
(3) sum(a) = 리스트 a 내의 값을 모두 더한 결과
숫자가 아닌 값이 있을 경우 오류 발생
(4) reversed(a) = 리스트 a 내의 값의 순서를 거꾸로 정렬
리버스 함수의 경우, 사용한 함수의 결과값은 "한 번"만 사용 가능
(5) enumerate(a) = 리스트 내의 값을 리스트화 시킬 수 있음(?? 사용을 어떻게?)
(6) a.items() = 딕셔너리 내의 키와 값을 보여줌 (이것 또한 사용을 어디에..??)

-리스트 내포
반복을 기반으로 새로운 리스트를 만드는 문법
[표현식 for 반복문] -> [2*1+1 for i in range(0, 10)]
복잡한 리스트 반복을 편리하고 간단하게 줄일 수 있음
줄바꿈을 통해 쉽게 문법을 이해할 수 있으며, 뒤에 조건문을 달아 조건도 달 수 있음
[2*1+1 #표현식
for i in range(0, 10) #반복문
if i % 2 == 0] #조건문

여러줄 문자열 """에서 맨 윗줄이 빌 경우, (역슬래시)를 통해 줄바꿈을 무시할 수 있음
띄어쓰기의 경우 들여쓰기로 인해 생기기 때문에 문자열 내에서 지워줘야 함 이는 join으로 해결
-->하지만 이는 후에 해당 코드를 읽는 것에 문제가 생기기 때문에, 이를 해결해야 함
(1) 괄호 문자열
괄호 안의 문자는 띄어쓰기나 줄바꿈이 인식되지 않는 하나의 변수로 적용된다.
즉,
( "a"
"b"
"c" ) = abc로 인식된다.
이를 통해 여러줄 문자열에서의 첫 줄이나 들여쓰기를 무시할 수 있다.
(2) join()
"".join([ "a",
"b",
"c"]) = abc로 인식된다.
join의 경우 () 사이에 다양한 기호를 섞어서 문자열을 이을 수 있다. (/n, /t, || 등)
->근데 ,(반점)은 들어가도 되는 건가..??
join은 앞의 괄호 문자열에 비해 범용성이 넓고, 파이썬 이외의 코드에서도 존재하므로,
커뮤니케이션에도 능함

-2진수, 8진수, 16진수 변환
f"{N:b}" -> 2진수 변환
f"{N:o}" -> 8진수 변환
f"{N:x}" -> 16진수 변환
int("N", 2or8or16) -> 2,8,16진수에서 10진수로 변환

-count()
"a".count("1") -> a 문자열 내에서 1이 몇 번 포함되는 지를 알 수 있음

리스트 결합 연산자의 경우 뒤에 더해줄 리스트를 []로 감싸주어 동일한 리스트 형태로
바꿔주어야 함

-후기
1. ㅇ...어려워지는데..??
2. 생각보다 이해할 수 있는 것이 많다.
3. 근데 문제에서 해당 부분을 떠오르게 할 수 있을까?
4. 이해가 되지 않는 부분은 정리하여 다시 질문
5. ㅍㅇㅌ

profile
프로그래밍을 위해

0개의 댓글