1. 정규표현식
- 원하는 구조의 문자열 추가
# 원하는 구조의 문자열 추출
# 'col'로 시작하며 하나의 문자열 후에 'r'이 오는 문자형 자료 찾기
import re
wordlist = ["color", "colour", "work", "working",
"fox", "worker", "working"]
for word in wordlist:
if re.search('col.r', word):
print(word)
# >>> color
# 만약 'col..r'로 설정하면 colour가 출력되고
# 'col.*r'로 설정하면 color, colour 둘다 출력된다. ('.*'는 임의의 문자열 의미)
- 문자열의 특정 패턴 확인
# re.match(pattern, str)
# match는 문자열의 시작에서만 패턴 검색 / search는 전체에서 검색
# <과 > 사이에 오는 모든 문자열을 찾으라는 뜻이며
# span()은 해당되는 부분의 시작 인덱스부터 끝 인덱스 반환
print(re.match('<html>', regular_expressions))
print(re.match('<html>', regular_expressions).span())
# >>> <re.Match object; span=(0, 6), match='<html>'>
# >>> (0, 6)
- phone number 형식 지정
# '010-숫자 네개-숫자 네개' 형식
phone = re.compile("""010-\d{4}-\d{4}""")
info = ['홍길동 010-1234-1234', '고길동 010-5678-5679']
for text in info:
match_object = phone.search(text)
print(match_object.group()) # matching된 부분 추출
# >>> 010-1234-1234
# >>> 010-5678-5679
- '/r'
# '/r'는 현재 활성 위치를 현재 라인의 시작 위치로 옮기는 역할
print(" \rHello")
print(" Hello")
# >>> Hello
# >>> Hello
- 문자열 앞 r의 의미
# 문자열 앞에 r을 붙이면 raw string이라는 뜻. 문자열 내용이 그대로 출력된다
print('raw string을 사용하지 않고\b 문자 출력하기')
print(r'raw string을 사용하지 않고\b 문자 출력하기')
# >>> raw string을 사용하지 않고 문자 출력하기
# >>> raw string을 사용하지 않고\b 문자 출력하기
# 파일 경로 출력하기
print('C:\programs\nayana')
print('C:\\programs\\nayana')
print(R'C:\programs\nayana')
# >>> C:\programs #'\n' 때문에 줄바꿈
# >>> ayana
# >>> C:\programs\nayana
# >>> C:\programs\nayana
2. 다양한 메소드 활용
# .rjust
# 원하는 문자로 문자열 앞부분 채우기
print('2'.rjust(3,'0'))
print('good'.rjust(10,'a'))
# >>> 002
# >>> aaaaaagood
# .zfill
# 0으로 문자열 앞부분 채우기
print('a'.zfill(5))
# >>> 0000a
# split
my_string = "Hello, I am Jack and I am a data scientist"
str_list = my_string.split()
print(str_list)
# >>> ['Hello,', 'I', 'am', 'Jack', 'and', 'I', 'am', 'a', 'data', 'scientist']
str_list2 = my_string.split(",")
print(str_list2)
# >>> ['Hello', ' I am Jack and I am a data scientist']
print(my_string.startswith('Hello'))
# >>> True
print(my_string.endswith('tist'))
# >>> True
print(my_string.replace("Jack", "John"))
# >>> Hello, I am John and I am a data scientist
# replace 결과를 변수에 담아주어야 저장할 수 있다
# 얕은 복사
fruits = {"apple", "banana", "cherry"}
fruits_copy = fruits.copy()
print(fruits_copy)
# >>> {'cherry', 'banana', 'apple'}
# B가 A를 참조하고 있기에 B에서 자료를 삭제하니 A에도 적용이 됐다
A = {'a': 5, 'b': 4, 'c': 8}
B = A
del B['a']
print(B)
# >>> {'b': 4, 'c': 8}
print(A)
# >>> {'b': 4, 'c': 8}
# 아래 경우에는 복사한 자료에 변화를 주어도 원래 자료는 변화하지 않았다
# 다만 원래 자료를 복사했다면 복사한 자료의 변화가 있었을 것
import copy
A = {'a': 5, 'b': 4, 'c': 8}
B = copy.copy(A)
del B['a']
print(B)
# >>> {'b': 4, 'c': 8}
print(A)
# >>> {'a': 5, 'b': 4, 'c': 8}
# 깊은 복사 : 내부의 객체들까지 새롭게 copy되는 것. 완전한 새로운 변수를 만드는 것이다
import copy
list_var = [[1,2],[3,4]] # 원래 자료
list_var_deepcopy = copy.deepcopy(list_var) # 깊은 복사
list_var_copy = copy.copy(list_var) # 얕은 복사
list_var[1].append(5)
print(list_var)
# >>> [[1, 2], [3, 4, 5]]
print(list_var_deepcopy)
# >>> [[1, 2], [3, 4]]
print(list_var_copy)
# >>> [[1, 2], [3, 4, 5]]
# 원래 자료를 바꾸자 얕은 복사 자료에는 영향을 주었고, 깊은 복사 자료에는 영향을 주지 않았다
3. 반복문과 조건문
# dict 자료형에 반복문 적용
# key가 차례대로 추출된다
mock_data = {
"id": 1,
"first_name": "states",
"last_name": "code",
"email": "code@states.com",
"gender": "Female",
"ip_address": "123.123.123.23"
}
for x in mock_data:
print(x)
# >>> id, first_name, last_name, email, gender, ip_address
# key만 추출하기
for x in mock_data.keys():
print(x)
# value만 추출하기
for x in mock_data.values():
print(x)
# .item()을 이용해 key와 value 한꺼번에 추출
for x in mock_data.items():
print(x)
# >>> ('id', 1), ('first_name', 'states'), ('last_name', 'code'), ('email', 'code@states.com'), ('gender', 'Female'), ('ip_address', '123.123.123.23')
for k,v in mock_data.items():
print(k,v)
# >>> id 1, first_name states, last_name code, email code@states.com, gender Female, ip_address 123.123.123.23
# 각 리스트 속 자료를 튜플형으로 순서대로 짝지어 출력
a = [1,2,3,4,5]
b = [10,20,30,40,50]
c = zip(a,b)
print(list(c))
# >>> [(1, 10), (2, 20), (3, 30), (4, 40), (5, 50)]
# 반복문과 zip
a = [1,2,3,4,5]
b = [10,20,30,40,50]
c = [100,200,300,400,500]
for x,y,z in zip(a,b,c):
print(x,y,z)
# break와 continue의 차이
# continue 예제
for i in range(1, 6):
if i == 3:
continue
print(i)
# >>> 1, 2, 4, 5
# break 예제
for i in range(1, 6):
if i == 3:
break
print(i)
# continue는 그 자리에서 곧장 for문으로 다시 돌아가서 다음 순번을 수행한다
# break는 그 자리에서 코드 수행 자체를 중단한다
# 1, 2
4. 컬렉션 자료형 내장 메소드
# append()
my_list = []
for i in range(1000, 2200):
if (i%7==0) and (i%5!=0):
my_list.append(str(i))
print(','.join(my_list))
# append(), extend(), insert()
# append()
# list 끝에 새로운 요소 추가 (단일 요소만 가능)
my_list = [1, 2, 3]
my_list.append([4, 5])
print(my_list)
# >>> [1, 2, 3, [4, 5]]
# extend()
# 여러개의 요소를 한번에 추가할 수 있음
my_list = [1, 2, 3]
my_list.extend([4, 5])
print(my_list)
# >>> [1, 2, 3, 4, 5]
# insert()
# 원하는 위치에 데이터를 삽입할 수 있음
my_list = [1, 2, 3]
my_list.insert(0, 4)
print(my_list)
# >>> [4, 1, 2, 3]
# 자료 삽입을 하는 또 다른 방법
my_list = [1, 2, 3, 4, 5]
my_list[0] = 99
print(my_list)
# >>> [99, 2, 3, 4, 5]
# append와 extend 두 메소드의 차이점에 주의하자
# '리스트' 추가
flavors1 = ['Vanilla', 'Chocolate']
flavors1.append(['Strawberry', 'MintChocolate'])
print(flavors1)
# >>> ['Vanilla', 'Chocolate', ['Strawberry', 'MintChocolate']]
flavors2 = ['Vanilla', 'Chocolate']
flavors2.extend(['Strawberry', 'MintChocolate'])
print(flavors2)
# >>> ['Vanilla', 'Chocolate', 'Strawberry', 'MintChocolate']
# '문자열' 추가
flavors3 = ['Vanilla', 'Chocolate','Strawberry']
flavors3.append('MintChocolate')
print(flavors3)
# >>> ['Vanilla', 'Chocolate', 'Strawberry', 'MintChocolate']
flavors4 = ['Vanilla', 'Chocolate','Strawberry']
flavors4.extend('MintChocolate')
print(flavors4)
# >>> ['Vanilla', 'Chocolate', 'Strawberry', 'M', 'i', 'n', 't', 'C', 'h', 'o', 'c', 'o', 'l', 'a', 't', 'e']
# input()을 이용해 직접 자료 입력 받아 리스트 형태로 반환하기
words = []
while True:
char = input()
if char:
words.append(char.upper())
else:
# while 문을 통해 char = input() 의 입력을 계속해서 받으므로,
# 입력할 데이터가 끝났으면 아무것도 입력하지 않고 엔터를 입력한다.
break;
print(words)
# 숫자를 문자열로 바꾸어 첫번째 자리, 세번째 자리의 수 각각에 조건 걸기
# 첫번째 자리와 마지막 자리를 짝수로
values = []
for i in range(100, 300):
char = str(i)
if (int(char[0])%2==0) and (int(char[2])%2==0):
values.append(char)
print(",".join(values))
# >>>200,202,204,206,208,210,212,214,216,218,220,222,224,226,228,230,232,234,236,238,240,242,244,246,248,250,252,254,256,258,260,262,264,266,268,270,272,274,276,278,280,282,284,286,288,290,292,294,296,298
# del, remove, pop
# del
# 지울 자료의 위치를 지정한다
my_list = [1, 2, 3, 4, 5]
del my_list[2]
print(my_list)
# >>> [1, 2, 4, 5]
# remove
# 지울 자체 자체를 입력해서 지우되 중복 자료가 있다면 첫번째 자료만 지운다
my_list = [1, 2, 3, 2, 4]
my_list.remove(2)
print(my_list)
# >>> [1, 3, 2, 4]
# pop
# 리스트에서 꺼냄과 동시에 변수에 넣어 쓸 수 있다
my_list = [1, 2, 2, 4, 5]
removed_element = my_list.pop(2)
print(my_list)
print(removed_element)
# >>> [1, 2, 4, 5]
# >>> 2
# 인스턴스에 아무것도 쓰지 않으면 맨 끝의 자료를 삭제한다
my_list = [1, 2, 3, 4, 5]
my_list.pop()
print(my_list)
# >>> [1, 2, 4]
# index, count
# index
# 자료를 검색해 index 번호를 찾을 수 있다
my_list = ['xyz', 'XYZ', 'abc', 'ABC']
print("Index for xyz : ", my_list.index( 'xyz' ))
print("Index for ABC : ", my_list.index( 'ABC' ))
# >>> Index for xyz : 0
# >>> Index for ABC : 3
# count
# 자료의 갯수를 세어준다
my_list = ['xyz', 'XYZ', 'abc', 'ABC']
print("Count for xyz : ", my_list.count( 'xyz' ))
print("Count for ABC : ", my_list.count( 'ABC' ))
# >>> Count for xyz : 1
# >>> Count for ABC : 1
# enumerate
# 리스트 자료형에 대해 각각의 index와 value를 함께 반환한다
li = [12,24,35,70,88,120]
for (i,x) in enumerate(li):
if i not in (0,3,5):
li = x
print(li)
5. 람다
# 함수 정의
define_word = (lambda word, define : word * define)
# 함수 호출
define_word('cat', 5)
# >>> 'catcatcatcatcat'
# map()
# map(function, iterable) : 먼저 람다 또는 적용할 함수를 쓰고, 그 다음 함수를 적용할 리스트 또는 튜플을 쓴다
# 이렇게 반환된 내용은 list에 넣거나 for문을 통해 쓸 수 있다
spelling = ["test1", "test2", "test4 test5", "test3"]
shout_spells = map(lambda item : item + ('!!!'), spelling)
print(list(shout_spells))
# >>> ['test1!!!', 'test2!!!', 'test4 test5!!!', 'test3!!!']
# filter()
# filter(function, iterable) : 위의 map과 비슷하게 적용할 조건과 대상을 쓴다
# 적용 대상 중에서 조건에 맞는 자료만을 반환한다
fellowship = ['frodo', 'samwise', 'merry', 'pippin', 'aragorn', 'boromir', 'legolas', 'gimli', 'gandalf']
result = filter(lambda member : len(member) > 6, fellowship)
print(list(result))
# >>> ['samwise', 'aragorn', 'boromir', 'legolas', 'gandalf']
# reduce()
# 리스트 내의 모든 값을 더하거나 곱할 때 쓸 수 있다
from functools import reduce
stark = ['robb', 'sansa', 'arya', 'brandon', 'rickon']
result = reduce(lambda item1, item2 : item1+item2, stark)
print(result)
# >>> robbsansaaryabrandonrickon
'Codestates AI 부트캠프 > 5. CS Fundamental' 카테고리의 다른 글
[알고리즘] 2-4 퀵정렬 / 병합정렬 (0) | 2023.07.07 |
---|---|
[알고리즘] 2-3 sorting (bubble / selection / insertion) (0) | 2023.07.07 |
[자료구조] 2-1 연결리스트 / 큐 / 스택 (0) | 2023.07.07 |
1-4 자료구조 / 시간복잡도 / 검색 알고리즘 (0) | 2023.07.06 |
1-2/1-3 OOP(객체지향 프로그래밍) (0) | 2023.07.06 |