본문 바로가기
SK shieldus Rookies 16기

[SK shieldus Rookies 16기] 클라우드 기반 스마트 융합 보안 과정 교육 정리(3일차)

by Challenge programmers 2023. 10. 25.

오늘 학습 주제

1. 리스트

2. 튜플

3. 딕셔너리

4. 문자열 처리

5. 정규 표현식

 

 

 

리스트(List)


 

가변 자료형

여러 항목을 담을 수 있는 순서가 있는 컬렉션

데이터 타입에 상관없이 마음대로 집어 넣을 수 있다

데이터를 추출하거나 변경도 가능하다

데이터 타입이 달라도 상관 없다
두가지 모두 선언 가능하다
insert(a, b)는 리스트의 위치 a에 데이터 b를 입력
데이터가 추가되는 위치를 지정 가능하다
append()는 리스트의 마지막에 데이터를 추가한다
append()로 리스트도 추가할 수 있다
+=로도 데이터 추가 가능하다
대괄호를 빼면 한글자씩 추가
remove()는 value로 데이터를 삭제한다. 중복된 데이터가 있을 경우 가장 앞에 있는 데이터 하나만 삭제한다
del은 인덱스로 데이터를 삭제한다
인덱스로 슬라이싱 출력
extend(x)는 리스트에 리스트를 더하는 방법으로 x에는 리스트만 들어갈 수 있다
in을 사용해서 리스트의 데이터를 확인해 bool 리턴
인덱스를 이용해서 데이터 변경
인덱스를 이용하여 위치 찾기
count()로 리스트 안의 해당 데이터 수 확인
pop()은 리스트의 마지막 value를 리턴한 뒤 삭제한다
sort()는 데이터를 순서에 맞춰 정렬한다
reverse()는 순서에 상관없이 현재 리스트를 반대로 정렬한다
(시작:끝:스텝)
반복문을 이용하여 데이터 사용
enumerate()는 데이터에 순서를 부여한다 이때 순서는 0부터 시작한다
코드 한 줄로 리스트 value를 변수에 할당(언패킹)

패킹: 한 변수에 여러 개의 데이터를 할당하여 하나로 합쳐주는 것

언패킹: 한 변수에 들어있는 데이터들을 각각의 변수로 반환하는 것

 

 

 

 

튜플(Tuple)


 

불변 자료형

()을 사용하여 정의한다

적은 메모리 공간을 사용한다

딕셔너리 키로 사용이 가능하다

함수의 파라미터는 튜플로 전달된다

()을 사용하여 튜플 생성
데이터를 수정하려면 리스트로 바꿔야 한다

call by value

변수에 담긴 값 그 자체를 복사하는 방식

함수 내에서 해당 변수를  바꿔도 영향이 없다

불변형 타입(정수형, 문자형 등)에서 사용

call by value

call by reference

인자로 받은 변수의 주소 값을 전달하는 방식

변수 값에 변화가 생기면 주소 값을 공유하는 변수 모두 변경된다

가변형 타입(리스트, 딕셔너리)에서 사용

call by reference

Copy

리스트의 값만 복사하여 새로운 주소 값의 변수에 할당

copy 모듈을 추가해야 한다

copy()는 리스트만 복사한다
deepcopy()는 내부 리스트까지 복사한다

 

 

 

 

딕셔너리(Dictionary)


단어에서 알 수 있듯이 사전이다

Key와 Value를 한 쌍으로 하는 자료형

Key를 통해 Value를 찾는다

슬라이싱 불가

딕셔너리의 생성 방법
콜론( : )을 이용하여 Key와 Value를 나누어 저장한다
Key를 통해 Value를 수정
리스트는 내용의 순서가 같지 않으면 False, 딕셔너리는 순서가 달라도 값이 같으니 True
get()을 이용하여 확인, 없는 value이니 None리턴
keys()를 이용한 Key 확인
values()를 이용한 딕셔너리 value 확인
items()를 이용하여 딕셔너리 안 Key와 Value 모두 확인
Key의 존재를 확인해 없는 Key를 생성
setdefault()를 이용하여 상단의 코드를 단축

setdefault()에서 첫번째 파라미터는 필수 입력 사항이나 두번째 파라미터는 입력하지 않아도 된다

첫번째 파라미터가 이미 딕셔너리에 존재한다면 그 Key의 값을 리턴하고 존재하지 않는다면 Key를 추가한다

 

 

 

 

기타


for 문 - 리스트, 튜플, 딕셔너리
inline for문으로 간결하게 만든 for문
enumerate()는 (index, value)의 튜플을 반환

 

 

 

 

문자열 처리


이스케이프 문자

원시 문자열을 볼 때에는 r을 앞에 붙여 사용 이스케이프 문자열이나 특수문자, 태그등을 그대로 출력
여러줄의 문자열은 따옴표 3개를 사용
문자열도 인덱스를 사용하고, 슬라이싱도 가능하다
문자열 안에 다른 문자열을 넣는 방법들
uppper() = 대문자 lower() = 소문자
문자열에 글자만 존재하는지 확인
문자열에 글자, 숫자만 존재 확인
문자열에 숫자만 존재하는지 확인
문자열에 띄어쓰기, 탭만 존재하는지 확인
문자열의 시작이 대문자인지 확인
startswith()는 특정 문자열로 시작을 확인endswith()는 특정 문자열로 끝남을 확인
join()은 특정 문자열로 결합 가능
split()은 특정 문자열로 나눌 때 사용
문자열에 길이를 정하고 문자열 외에는 공백이나 특정한 문자를 넣기
문자열의 공백 제거 / 왼쪽(l), 오른쪽(r)
ord()는 문자의 유니코드로chr()는 유니코드의 문자로

 

 

 

 

정규표현식


복잡한 문자열을 처리할 때 사용하는 기법

 

정규식을 사용하면 좋은 경우

-이메일, URL, 전화번호 등 입력 유효성 검증

-SQL injection, HEML 태그 등 pattern에 기반한 감지와 치환

 

정규식을 사용하지 않는 것이 더 좋은 경우

- 단순 길이 계산

- 비교, 추출, 접합, 자르기

 

정규표현식 없는 전화번호 pattern 찾기
정규표현식으로 전화번호 pattern 찾기

정규 표현식에는 다음과 같은 메타 문자가 있다

메타문자 설명 예시 
dot( . ) 임의의 모든 문자를 의미한다
줄바꿈(\n)을 제외한 모든 문자와 매치 확인
[a.z]:
a와 z사이에 어떤 문자가 들어가도 True
캐럿( ^ ) 줄의 시작을 의미한다 [^abc] :
abc로 시작하는 것
달러( $ ) 줄의 끝을 의미한다 [abc$] :
 abc로 끝나는 것
애스터리스크( * ) 반복을 의미한다
애스터리스크(*) 앞에 있는 문자가 반복되는 것을 매치 확인
반복 횟수 0부터 사용
[ab*c] :
b가 반복되는 것
반복하지 않아도 True 
 Plus( + ) 애스터리스크(*)와 같이 반복을 나타낸다
최소 1번 이상 반복할 때 사용
반복 횟수 1부터 사용
[ab+c] :
b가 1회 이상 반복하는 것
물음표( ? ) 있어도 되고 없어도 되는 문자 확인 [ab?c] :
b가 있어도 되고 없어도 되고
 
괄호 ( ) 그룹을 의미한다 [(abc)] :
abc가 묶여있는 것을 확인
 
 중괄호 { }  반복 제한을 의미한다
중괄호 { } 안에 지정된 숫자만큼 반복해야 된다
중괄호 { } 안에 쉼표(,)를 넣어 반복 범위 지정 가능
 ab{2} :
b를 2회 반복하는 것
ab{2,5}c :
 b를 2~5회 반복하는 것
대괄호 [ ] [ ] 사이의 문자들과 매치 확인
하이픈(-)을 사용하면 범위를 지정할 수 있다
대괄호 [ ]안에서 캐럿(^)은 반대(not)를 의미한다
 [abc]:
abc가 있으면 True
[a-c]:
a~c까지 있으면 True
[^abc]:
abc가 없으면 True
백슬래시 ( \ ) 표기법을 사용할 때 사용 \d \s \b \w 
파이프( | ) OR을 의미한다 [a|b]:
a나 b 중 하나만 있어도 True

 

- 정규식 함수 -

함수 설명
match(pattern, string) string이 pattern과 일치하는지 검사
search(pattern, string ) 첫번째 일치하는 pattern 찾기
findall(pattern, string ) 일치하는 모든 pattern 찾기
sub(pattern, replace) pattern을 replace로 치환
split(pattern, string) 문자열 대신에 pattern으로 문자열을 
리스트로 분리
compile(pattern) pattern을 컴파일하여 정규식 객체로 반환

 

하이픈(-)으로 범위를 지정하고 중괄호{ }로 반복횟수 제한하여 조건에 맞는 문자 확인
중괄호 { }를 이용하여 반복 횟수 체크로 전화번호와 휴대전화 번호 확인
이메일의 pattern을 조건으로 이메일 유효성 검사
URL의 pattern을 조건으로 URL 유효성 검사
이미지 파일의 pattern을 조건으로 URL 유효성 검사
findall()과 search()의 사용
split()으로 text의 value를 pettern으로 나누기
sub()으로 text의 value을 pattern으로 치환
괄호 () 를 사용한 그룹핑
캐럿(^)으로 시작지점을 지정하고 달러($)로 끝 지점을 지정해서 패턴 생성
dot(.)과 애스터리스크(*)를 합치면 모든 문자를 리턴
re.I 는 대소문자를 구분하지 않는다
물음표(?)는 해당 pattern이 존재하면 존재하는 value를, 존재하지 않는다면 제외하고 리턴
애스터리스크(*)는 pattern이 여러번 존재하는 value도 리턴
플러스(+)는 pattern이 최소 하나 이상 있는 것을 리턴
중괄호{ }는 지정한 값만큼 반복되는 value를 리턴

 

 

 

- 참고 -

https://riverpark94.github.io/programing_study/2020/06/09/Python-TIL2/

https://wikidocs.net/4308

https://wikidocs.net/46744