코드스테이츠 AI 부트캠프/Section 5

코드스테이츠_AIB_511 : 파이썬 프로그래밍

yourhm 2022. 2. 24. 09:59
section5 최종 목적은 자료구조와 알고리즘을 이해하며 프로그래밍하는 것이다.
511 - 514 목적은 문제해결을 위해 파이썬을 활용하고 함수, 반복과 조건개념에 익숙해지는 것이다.

 

학습목표

  • 파이썬 다양한 메소드에 대해 내부로직을 생각하면서 어떤 상황에서 활용되는지 익히기
  • 다양한 코드를 활용하여 컬렉션 자료형(리스트, 튜플, 셋, 딕셔너리)에 대해 익히기
  • 현실상황을 수학적 기초개념(사칙연산)으로 프로그래밍하는데 익숙해지기

 

핵심 키워드

  • 문제해결 & 컴퓨팅 사고력
  • 내장 메소드
  • 반복문과 조건문
  • 프로그래밍

 


1. 다양한 메소드 활용

정규표현식(=정규식)

rjust / zfill / split

깊은복사, 얕은복사

반복문, 조건문

에러메세지 상황파악

 

정규표현식

복잡한 문자열을 처리할 때 사용하는 방법. 예를 들어, 아래와 같은 문제를 해결해야 하는 상황이 있을 때 정규표현식을 사용하면 훨씬 코드가 간결해진다.

 

Q.

주민등록번호가 포함된 문자열이 있는데, 모든 주민등록번호 뒷자리를 * 문자로 변경해야 한다.

 

A.

[방법1] 정규표현식을 사용하지 않는 방법.

data = """
jason 890205-1011222
tommy 930911-1033444
"""

result = []

for line in data.split("\n"):
    word_result = []
    for word in line.split(" "):
        if len(word) == 14 and word[:6].isdigit() and word[7:].isdigit():
            word = word[:6] + "-" + "*******"
        word_result.append(word)
    result.append(" ".join(word_result))
print("\n".join(result))

 

[방법2] 정규표현식을 사용하는 방법

import re 

data = """
jason 890205-1011222
tommy 930911-1033444
"""

pat = re.compile("(\d{6})[-]\d{7}")
print(pat.sub("\g<1>-*******", data))

 

결과값:

jason 890205-*******
tommy 930911-*******

 

 

 

파이썬에서 정규표현식을 사용할 때, 내장 모듈인 re를 사용한다.

import re

 

모듈에서 제공하는 함수는 여러가지가 있다. 

- re.search

- re.match

- re.compile

 

 

https://wikidocs.net/4308

https://hamait.tistory.com/342

 

 

 

2. 컬렉션 자료형의 다양한 활용

리스트 / 튜플 / 딕셔너리 / 셋

 

<파이썬에서 지원하는 자료형 중 세트(Set)가 리스트와 튜플과 다른 점>

1. 데이터를 중복해서 쓸 수 없다. (세트에 들어가는 요소는 중복될 수 없다.)

2. 데이터의 순서가 없다. (세트는 요소의 순서가 정해져 있지 않다.)

 

 

(1) append / extend / insert

# Example (append)
li = ['apple', 'banana', 'carrot']
x = 'durian'

li.append(x)
print('li:', li)

# Output
li: ['apple', 'banana', 'carrot', 'durian']
  • list.append(x)는 리스트 끝에 x 1개를 그대로 넣는다.

 

# Example (extend)
li = ['apple', 'banana', 'carrot']
x = 'durian'

li.extend(x)
print('li:', li)

# Output
li: ['apple', 'banana', 'carrot', 'd', 'u', 'r', 'i', 'a', 'n']
  • list.extend(iterable)는 리스트 끝에 가장 바깥쪽 iterable의 모든 항목을 넣는다.
  • 위 예시처럼 extend에 문자열을 넣으면 한 글자씩 요소로 더해진다.
  • 그래서 extend는 리스트 + 리스트 로 합칠 때 사용하면 편리하다.

 

# Example (insert)
li = ['apple', 'banana', 'carrot']
x = 'durian'

li.insert(len(li), x)
print('li:', li)

# Output
li: ['apple', 'banana', 'carrot', 'durian']
  • list.insert(i, x) 형태로 사용한다. list의 원하는 위치 i 앞에 x를 삽입할 수 있다. i는 위치를 나타내는 인덱스 숫자를 입력한다.
  • a.append(x) == a.insert(len(a),x) 

 

 

(2) remove / del / pop

제거하고 난 뒤 리스트 원본 값을 출력해보고 어떻게 다른지 비교!

 

 

(3) count()

 

(4) index()

 

(5) enumerate()

 

 

리스트의 내장 메소드

set의 내장 메소드

 

sort / sorted

 

get

 

10/2 = 5.0

ㄴ파이썬(3.x 버전)에서 나눗셈 연산은 실수로 처리하기 때문에 정수/정수의 경우에 결과가 실수(float)로 처리된다.

 

 

 

3. 파이썬 함수

Lambda(람다) 

# 구조
lambda 매개변수 : 표현식

# 예시
lambda(x: x+1)

 

 

<람다와 함께 사용되는 함수들>

1. map(lambda~, a)

2. filter(lambda~, a)

3. reduce(lambda)

# Example
from functools import reduce   # 파이썬 3에서는 반드시 작성하기
reduce(lambda x, y: x + y, [0, 1, 2, 3, 4])

# Output
10

 

 

https://wikidocs.net/64

 

 

 

4. 프로그래밍 언어

프로그래밍 언어란 컴퓨터에 명령을 내리려고 만든 언어

 

컴퓨터를 처음 만들었을 때 프로그래밍은 컴퓨터 중앙처리장치 같은 하드웨어에 전기 신호를 직접 주기 위한 0과 1로 이뤄진 명령의 나열이었다. 이렇게 이진 숫자(0과 1)로만 이뤄진 명령을 기계어(Machine language)라고 함.

기계어는 0과 1의 조합으로만 명령을 내려야 하는 단점이 있음. 이런 단점을 극복하고자 어셈블리어가 만들어졌다. 어셈블리어(Assembly language)로 작성된 코드는 다시 기계어로 변환해야 컴퓨터가 이해하고 실행하며, 이렇게 변환하는 프로그램을 어셈블러(Assembler)라고 한다.

하지만 어셈블리어는 컴퓨터 하드웨어에 대한 지식이 없는 사람이 다루기에 어려웠음. 이를 보완한 언어들이 나왔고 이를 고급어(High-level language)라고 하며, 어셈블리어를 저급어(Low-level language)라고 한다. 고급어로 작성된 코드 역시 바로 실행될 수 없으며 컴퓨터가 해석할 수 있는 기계어로 바꿔줘야 컴퓨터가 이해할 수 있다.

 

고급어
: 베이직(BASIC), 포트란(FORTRAN), C, C++, C#, 자바(Java), 파이썬(Python), 루비(Ruby), 펄(Perl), 루아(Lua), R 등

 

 

기계어를 번역하는 방식에 따라 컴파일드 언어(Compiled Language)와 인터프리티드 언어(Interpreted Language)로 구분할 수 있다. 컴파일드 언어는 다수의 명령어로 이뤄진 소스코드를 한 번에 기계어로 번역해서 실행 파일을 만들어낸다. 이에 반해, 인터프리티드 언어는 소스코드를 한 줄씩 기계어로 번역해서 실행 결과를 보여준다. 인터프리티드 언어는 스크립트(Script)언어라고도 한다.

 

 

 

 

[참고 자료]

https://velog.io/@inyong_pang/Python-List-Tuple-Dictionary-and-Set-%EC%9A%94%EC%95%BD

 

Python - List, Tuple, Dictionary and Set 요약

리스트(List) 파이썬이 제공하는 시퀀스 자료구조인 리스트는 C언어 또는 Java언어에서 사용하는 배열(Array)과 가장 흡사하고, 스택(stack)과 큐(Queue)및 데크(Deque)를 구현할 때에도 자주 사용되는 자

velog.io

 

https://dev-note-97.tistory.com/65

 

[Python] 파이썬 나눗셈 나머지, 몫 구하기 ( / , %, // , divmod)

파이썬에서 나눗셈 연산을 시행한 결과를 얻는 방식은 다음과 같이 4개가 있습니다. ('/', '%', '//', divmod()) 1. "/" : 단순 나눗셈 - 가장 기본적인 나눗셈 (float형) a = 5 b = 3 print("a 나누기 b: ", a/b)..

dev-note-97.tistory.com

https://earthteacher.tistory.com/120

 

[파이썬] join() 을 이용해 문자열 사이에 구분자(특정문자) 넣기

Join 함수? - 리스트에 특정 구분자를 추가하여 문자열로 변환하는 함수 예시 lst = ['a', 'b', 'c', 'd'] print( ''.join(lst) ) # abcd print( ','.join(lst) ) # a,b,c,d print( '--'.join(lst) ) # a--b--c--d..

earthteacher.tistory.com

https://velog.io/@aonee/Python-%EC%A0%95%EB%A0%AC-sort-sorted-reverse

 

[Python] 정렬 문법 sort() sorted() reverse

 

velog.io

https://infinitt.tistory.com/177

 

파이썬 (Python) 자주 사용되는 문자열 함수 (코딩테스트, 알고리즘)

*문자열 (String) 1. 대문자, 소문자 str.upper() : str을 대문자로 출력합니다. str.lower() : str을 소문자로 출력합니다. str.isupper() : str이 대문자인지 검사합니다. (True or False로 반환) str.islower()..

infinitt.tistory.com