본문 바로가기
  • 실행력이 모든걸 결정한다
Python

[Python 간단정리 1] 파이썬 소개 및 설치 / 자료형

by 김코더 김주역 2023. 1. 4.
반응형

1. 파이썬의 특징

  • 인터프리터 언어 : 소스 코드를 한줄씩 번역하고 실행
  • 간결하고 직관적이다.
  • 시스템 명령어들을 이용할 수 있는 도구를 갖추고 있다.
  • 콜론과 들여쓰기를 통해 단락을 구분한다.
  • #으로 시작하는 문장을 주석으로 인식한다. 주석문이 여러 줄인 경우에는 주석문 사이를 연속된 작은따옴표 3개(''') 또는 큰따옴표 3개(""")로 묶는다.
  • 현재까지는 파이썬으로 앱을 만들기는 어렵다.

 

 

 

2. 파이썬 설치

www.python.org/downloads/

 

Download Python

The official home of the Python Programming Language

www.python.org

"Add Python.exe PATH"를 체크하면 직접 환경변수를 추가하지 않아도 자동으로 설정된다.

 

파이썬이 잘 설치되었는지 확인하려면 명령 프롬포트에서 "python --version"을 입력하면 된다.

 

 

 

3. 파이썬 파일의 실행

python 파일명.py

 

 

 

4. 자료형

- 파이썬의 모든 자료형은 객체다. ★

 

1) 숫자형

(1) 종류

- 정수 => 예) 123, -456, 0

- 실수 => 예) 1.2, -3.45, 4.25e-10

- 복소수 => 예) 1+2j, 3-4J

a=1+2j
print(a.real) # 실수 부분 리턴
print(a.imag) # 허수 부분 리턴
print(a.conjugate()) # 켤레복소수 리턴
print(abs(a)) # 복소수의 크기 리턴

- 8진수 => 예) 0o166, 0O177

- 16진수 => 예) 0x8af

 

(2) 연산자

- +, -, *, /

- **(제곱) => 예) 3**7은 3의 7제곱을 의미한다.

- %(나머지) => 예) 7%3은 7을 3으로 나눈 나머지(1)를 의미한다.

- //(나눗셈 후 소수 부분 버림) => 예) 7//4는 1.75가 아닌 1이 나온다.

 

 

2) 문자열

(1) 문자열 만들기

- 큰따옴표 사용 => 예) "Hello, Python"

- 작은따옴표 사용 => 예) 'Hello, Python'

- 큰따옴표 3개 연속 사용 => 예) """Hello, Python"""

- 작은따옴표 3개 연속 사용 => 예) '''Hello, Python'''

 

(2) 문자열 안에 작은따옴표나 큰따옴표를 포함시키는 방법

- 작은따옴표가 포함되어 있는 문자열은 큰따옴표로 감싼다. => 예) "Jooyeok's room"

- 큰따옴표가 포함되어 있는 문자열은 작은따옴표로 감싼다. => 예) 'He said "Python is easy"'

- \(백슬래시)를 작은따옴표나 큰따옴표 앞에 삽입한다. => 예) 'Jooyeok/'s room'

 

(3) 여러 줄인 문자열을 변수에 대입하는 방법

- '\n' 삽입

str = "Life is too short\nYou need python"

- 연속된 작은따옴표 3개(''') 또는 큰따옴표 3개(""")이용

str='''
    Life is too short
    You need python
'''

 

(4) 이스케이프(문자 조합) 코드

- \n : 줄바꿈

- \t : 탭 간격 띄우기

- \\ : 문자 \를 그대로 표현

- \' : 작은따옴표를 그대로 표현

- \" : 큰따옴표를 그대로 표현

- \b : 백 스페이스

- \000 : 널 문자

 

(5) 문자열 연산

- 두 문자열은 +에 의해 합쳐진다.

a="Hello, "
b="World"
print(a+b) # 'Hello, World'

- 문자열은 *에 의해 곱해진다.

a="Hello"
print(a*2) # 'HelloHello'

 

(6) 문자열 인덱싱과 슬라이싱

a="Life is too short, You need Python"
print(a[0]) # 'L'
print(a[5]) # 'i'
print(a[-1]) # 'n' (뒤에서 첫 번째)
print(a[0:4]) # 'Life'
print(a[12:17]) # 'short'
print(a[:17]) # 'Life is too short' (처음부터 16까지)
print(a[19:]) # 'You need Python' (19부터 끝까지)
print(a[:]) # 'Life is too short, You need Python'
print(a[19:-7]) # 'You need'

- 문자열 슬라이싱을 이용하여 문자열의 일부를 변경할 수 있다. a[1]='y'와 같이 인덱스를 통해 문자열의 일부를 바꾸는 것은 불가능하다.

a="Pithon"
print(a[:1]+'y'+a[2:]) # 'Python'

 

(7) 문자열 포매팅

n = 3
name="Jooyeok"
print("I have %d apples" % n) # 'I have 3 apples'
print("My name is %s" % name) # 'My name is Jooyeok'
print("I have %d apples and my name is %s" % (n, name)) # 'I have 3 apples and my name is Jooyeok'

- %s : 문자열

※ %s는 어떤 형태의 값이든 문자열로 변환해 넣을 수 있다.

- %c : 문자

- %d : 정수

- %f : 부동 소수

- %o : 8진수

- %x : 16진수

- %% : '%' 자체

print("%10s" % "hello") # '     hello' (길이가 10인 공간에서 hello를 오른쪽으로 정렬하고 나머지는 공백)
print("%-10s" % "hello") # 'hello     ' (길이가 10인 공간에서 hello를 왼쪽으로 정렬하고 나머지는 공백)
print("%-10shi" % "hello") # 'hello     hi' (뒤에 나오는 hi는 길이가 10인 공간에 포함되지 않음)
print("%0.4f" % 3.1415926535) # '3.1416'
print("%10.4f" % 3.1415926535) # '    3.1416'

 

(8) 고급 문자열 포매팅 - format()

- 인덱스 방식과 이름 방식이 있으며 이들을 혼용할 수도 있다.

n = 3
name="Jooyeok"
print("I have {0} apples".format(n)) # 'I have 3 apples'
print("My name is {0}".format(name)) # 'My name is Jooyeok'
print("I have {0} apples and my name is {1}".format(n, name)) # 'I have 3 apples and my name is Jooyeok'
print("I have {n} apples and my name is {name}".format(n=n, name=name)) # 'I have 3 apples and my name is Jooyeok'

- 채워 넣을 문자, 채워 넣는 방향, 총 공간을 함께 지정할 수 있다.

print("{0:<10}".format("hi")) # 'hi        '
print("{0:>10}".format("hi")) # '        hi'
print("{0:^10}".format("hi")) # '    hi    '
print("{0:=^10}".format("hi")) # '====hi===='
print("{0:!<10}".format("hi")) # 'hi!!!!!!!!'
a=3.1415926535
print("{0:0.4f}".format(a)) # '3.1416'
print("{0:10.4f}".format(a)) # '    3.1416'
print("{0:!<10.4f}".format(a)) # '3.1416!!!!'

- 중괄호 2개를 연속해서 사용함으로써 중괄호를 출력할 수 있다.

print("{{ hi }}".format()) # '{ hi }'

 

(9) 문자열 관련 함수들

- count() : 문자나 문자열의 포함 개수 세기

a="title"
print(a.count('t')) # 2

- find() : 찾는 문자나 문자열이 처음으로 나온 위치 반환

a="title"
print(a.find('t')) # 3
print(a.find('a')) # -1 (찾을 수 없는 경우 -1을 반환)

- index() : 찾는 문자나 문자열이 없을 때 오류가 발생한다는 차이를 제외하고는 find()와 동일

- join() : 문자나 문자열을 삽입

a=","
print(a.join('abcde')) # 'a,b,c,d,e'
b=['a','b','c','d','e']
print(" ".join(b)) # 'a b c d e' (리스트를 문자열로 만들 수도 있음)

- upper(), lower() : 대문자/소문자 변경

a="aBcDe"
print(a.upper()) # 'ABCDE'
print(a.lower()) # 'abcde'

- lstrip(), rstrip(), strip() : 왼쪽/오른쪽/양쪽 공백 지우기

a=" Hello "
print(a.lstrip()) # 'Hello '
print(a.rstrip()) # ' Hello'
print(a.strip()) # 'Hello'

- replace() : 문자열 바꾸기

a="I love you"
print(a.replace('you', 'me')) # 'I love me'

- split() : 문자열 쪼개기

a="I love you"
print(a.split()) # ['I', 'love', 'you'] (기본적으로 공백을 기준으로 나눔)
b="1:37:05"
print(b.split(':')) # ['1', '37', '05']

- str() : 정수나 실수를 문자열의 형태로 변환

a=3.1415926535
print("pi = "+str(a)) # pi = 3.1415926535

 

 

3) 리스트

(1) 리스트의 특징

- 요소를 대괄호로 감싸 주고 각 요소값들은 쉼표로 구분해준다.

odd=[1,3,5,7,9]

- 리스트 안에는 어떠한 자료형도 포함시킬 수 있다. 서로 다른 자료형을 넣을 수도 있고 리스트 자체를 요소값으로 가질 수도 있다.

- 중복을 허용한다.

- 수정이 가능하다.

- 인덱스로 요소값을 조회할 수 있다.

 

(2) 리스트의 인덱싱

a=[1,2,3,['a','b']]
print(a[2]) # 3
print(a[-1]) # ['a', 'b']
print(a[3][1]) # b

 

(3) 리스트의 슬라이싱

a=[1,2,3,['a','b']]
print(a[1:3]) # [2, 3]
print(a[3][:1]) # ['a']

 

(4) 리스트 연산자

- 두 리스트를 + 기호로 붙일 수 있다.

- 리스트를 * 기호로 반복할 수 있다.

a=[1,2,3]
b=[3,4,5]
print(a+b) # [1, 2, 3, 3, 4, 5]
print(a*2) # [1, 2, 3, 1, 2, 3]

 

(5) 리스트의 변경

- 하나의 값 수정하기

a=[1,2,3]
a[2]=4
print(a) # [1, 2, 4]
a[2]=[3,4]
print(a) # [1, 2, [3, 4]]

- 연속된 범위의 값 수정하기

a=[1,2,3,4,5]
a[2:4]=['a','b']
print(a) # [1, 2, 'a', 'b', 5]

- 리스트 요소 삭제하기 : 빈 리스트([]) 또는 del을 이용하면 된다.

a=[1,2,3,4,5,6,7]
del a[2]
print(a) # [1, 2, 4, 5, 6, 7]
del a[1:3]
print(a) # [1, 5, 6, 7]
a[0:2]=[]
print(a) # [6, 7]

 

(6) 리스트 관련 함수들

- append() : 리스트의 맨 마지막 요소에 요소를 추가

a=[1,2,3]
a.append(4)
print(a) # [1, 2, 3, 4]
a.append([5,6])
print(a) # [1, 2, 3, 4, [5, 6]]

- sort() : 리스트의 정렬

a=[1,6,2,5,3,4]
a.sort()
print(a) # [1, 2, 3, 4, 5, 6]

- reverse() : 리스트 뒤집기

a=[1,2,3,4,5]
a.reverse()
print(a) # [5, 4, 3, 2, 1]

- index() : 찾는 값의 최소 위치값을 반환한다. 찾는 값이 없으면 오류가 발생한다.

a=[1,6,2,4,3,8,8]
print(a.index(8)) # 5 (8은 리스트의 5, 6번째 인덱스에 있기 때문에 최소 위치값인 5를 출력)

※ 리스트에서는 find() 함수를 지원하지 않는다.

- insert() : 리스트의 특정 위치에 요소를 삽입

a=[1,2,3,4,5]
a.insert(3, 10)
print(a) # [1, 2, 3, 10, 4, 5]

- remove() : 첫 번째로 나오는 특정 요소를 제거

a=[1,2,3,4,5]
a.remove(3)
print(a) # [1, 2, 4, 5]

- pop() : 리스트 요소 끄집어내기

a=[1,2,3,4,5]
print(a.pop()) # 5 (맨 마지막 요소를 반환하고 제거)
print(a) # [1, 2, 3, 4]
print(a.pop(1)) # 2 (인덱스 1에 해당하는 요소를 반환하고 제거)
print(a) # [1, 3, 4]

- count() : 리스트에 포함된 특정 요소의 개수 세기

a=[3,3,5,5,5]
print(a.count(3)) # 2
print(a.count(4)) # 0
print(a.count(5)) # 3

- extend() : 리스트 확장 (파라미터에는 리스트만 올 수 있음)

a=[1,2,3]
a.extend([4,5]) # a+=[4,5]와 동일한 역할을 한다.
print(a) # [1, 2, 3, 4, 5]

 

 

4) 튜플

- 리스트와 달리 요소를 소괄호(())로 감싸준다. 소괄호는 생략해도 무방하다.

t=(1,2,3)
t=1,2,3

- 중복을 허용한다.

- 수정이 불가능하기 때문에 요소 값이 항상 변하지 않기를 바랄 때 쓰인다. 값을 변화시키지 않는 인덱싱, 슬라이싱, 더하기(+), 곱하기(*) 연산은 가능하다. 객체의 고유 주소값을 출력하는 id()를 통해 간단한 실험을 해보자.

a=(1,2,3)
print(id(a)) # 2273382884416
a=a+(4,) # 요소 4를 추가
print(id(a)) # 2273382855792 (a가 변경되는 것이 아니라 새로운 튜플이 생성됨을 알 수 있음)

- 인덱스로 요소값을 조회할 수 있다.

- 1개의 요소만을 가질 때는 요소 뒤에 반드시 콤마를 붙여야 한다.

t = (1,)

 

 

 

5) 딕셔너리

(1) 딕셔너리의 특징

- key와 value를 한 쌍으로 갖는 자료형이다.

dic={"name":"Jooyeok", "age": 26, "lecture":[126231, 126232, 126245]}

- 순서가 없기 때문에, 요소를 순차적으로 검색하지 않고 key를 통해 해당 요소가 있는 곳에 접근한다.

- key의 중복을 허용하지 않는다.

- key는 변할 수 없다.

※ 위와 같은 이유로 리스트는 key가 될 수 없지만, 튜플은 key가 될 수 있다.

 

(2) 딕셔너리 쌍 추가하기

a={1:'a'}
a[2]='b'
print(a) # {1: 'a', 2: 'b'}
a['hi']=[1,3,5]
print(a) # {1: 'a', 2: 'b', 'hi': [1, 3, 5]}

 

(3) 딕셔너리 요소 삭제하기

- del을 사용하면 된다.

dic={1: 'a', 2: 'b', 'hi': [1, 3, 5]}
del dic['hi']
print(dic) # {1: 'a', 2: 'b'}

 

(4) 딕셔너리 검색

- 딕셔너리는 인덱스가 아닌 key를 통해 검색한다.

dic={"name":"Jooyeok", "age": 26, "lecture":[126231, 126232, 126245]}
print(dic["name"]) # 'Jooyeok'
print(dic["age"]) # 26

 

(5) 딕셔너리 관련 함수들

- keys() : 딕셔너리의 모든 key를 모은 dict_keys 객체를 반환한다.

- values() : 딕셔너리의 모든 value를 모은 dict_values 객체를 반환한다.

- items() : 딕셔너리의 모든 key-value 쌍을 모은 dict_items 객체를 반환한다. 각 key-value 쌍은 튜플로 묶인다.

dic={"name":"Jooyeok", "age": 26, "lecture":[126231, 126232, 126245]}
print(dic.keys()) # dict_keys(['name', 'age', 'lecture'])
print(dic.values()) # dict_values(['Jooyeok', 26, [126231, 126232, 126245]])
print(dic.items()) # dict_items([('name', 'Jooyeok'), ('age', 26), ('lecture', [126231, 126232, 126245])])

※ dict_keys, dict_values, dict_items는 리스트로 변환하지 않더라도 기본적인 반복문들을 실행할 수 있다. 그러나 리스트 고유 함수인 append, insert, pop, remove, sort 등의 함수를 수행할 수는 없다. 리스트로 변환하고 싶다면 list() 함수를 이용하면 된다.

dic={"name":"Jooyeok", "age": 26, "lecture":[126231, 126232, 126245]}
print(list(dic.keys())) # ['name', 'age', 'lecture']

- get() : 특정 key에 대응되는 value를 돌려준다. 존재하지 않는 키를 사용했을 경우에 반환 받을 디폴트 값을 지정할 수 있으며, 디폴트 값을 지정하지 않았다면 None을 리턴한다.

dic={"name":"Jooyeok", "age": 26, "lecture":[126231, 126232, 126245]}
print(dic.get("name")) # 'Jooyeok'
print(dic.get("nam", "Lamb")) # 'Lamb'
print(dic.get("nam")) # None

- clear() : 딕셔너리의 모든 요소를 삭제한다.

- pop() : 특정 key에 대한 key-value 쌍을 제거하고 value 값을 반환한다.

dic={"name":"Jooyeok", "age": 26, "lecture":[126231, 126232, 126245]}
print(dic.pop("lecture")) # [126231, 126232, 126245]
print(dic) # {'name': 'Jooyeok', 'age': 26}

 

(6) 해당 key가 딕셔너리 안에 있는지 검사하기

dic={"name":"Jooyeok", "age": 26, "lecture":[126231, 126232, 126245]}
print('age' in dic) # True
print('ag' in dic) # False

 

 

6) 집합

(1) 집합의 특징

- set 키워드를 이용해서 만든다.

- 중복을 허용하지 않는다.

- 순서가 없다.

s1=set([2,3,1,2,3])
s2=set("PythonPython")
print(s1) # {1, 2, 3}
print(s2) # {'o', 'y', 'h', 'P', 't', 'n'} (실행할 때마다 순서가 바뀜)

- list(), tuple()을 통해 각각 리스트와 튜플로 변환할 수 있다.

s=set("PythonPython")
print(list(s)) # ['o', 'h', 'y', 'P', 'n', 't'] (실행할 때마다 순서가 바뀜)
print(tuple(s)) # ('o', 'h', 'y', 'P', 'n', 't') (실행할 때마다 순서가 바뀜)

 

(2) 교집합/합집합/차집합 구하기

s1=set([1,2,3,4,5,6])
s2=set([3,4,5,6,7,8])

print(s1&s2) # {3, 4, 5, 6} (교집합)
print(s1.intersection(s2)) # {3, 4, 5, 6} (교집합)

print(s1|s2) # {1, 2, 3, 4, 5, 6, 7, 8} (합집합)
print(s1.union(s2)) # {1, 2, 3, 4, 5, 6, 7, 8} (합집합)

print(s1-s2) # {1, 2} (차집합)
print(s1.difference(s2)) # {1, 2} (차집합)

 

(3) 집합 관련 함수들

- add() : 1개의 요소 추가

- update() : 여러 개의 요소를 추가

- remove() : 특정 요소 제거

s=set([1,2,3,4,5,6])
s.add(4) # set은 중복을 허용하지 않기 때문에 무시됨
s.add(7)
print(s) # {1, 2, 3, 4, 5, 6, 7}
s.update([8,9,10]) # 리스트 외에도 튜플, set 사용 가능
print(s) # {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
s.remove(4)
print(s) # {1, 2, 3, 5, 6, 7, 8, 9, 10}

 

 

7) 자료형의 참과 거짓

- 문자열, 리스트, 튜플, 딕셔너리 등의 값이 비어 있으면 거짓이 된다.

- 숫자형은 0이 거짓이 된다.

- None은 거짓이 된다.

 

 

8) 파이썬의 변수

(1) 파이썬 변수의 특징

- 변수는 자료형의 값을 저장하는 공간이다.

- 변수의 이름은 객체가 저장된 메모리의 위치를 가리킨다.

- 파이썬은 변수에 저장된 값을 스스로 판단하여 자료형을 알아내기 때문에 변수의 자료형을 함께 쓸 필요가 없다.

 

(2) 파이썬 변수를 생성하는 여러 가지 방법

- 파이썬은 한 줄에 여러 개의 변수에 값을 대입할 수 있다.

a, b = ('apple', 'banana')
print(a) # apple
print(b) # banana

 

a, b = ['apple', 'banana']
print(a) # apple
print(b) # banana

 

a=b=3
print(a) # 3
print(b) # 3

이러한 특징을 이용하여 두 변수의 값을 간단히 스왑할 수 있다.

a=3
b=4
a,b=b,a # 다른 언어들과 달리 스왑할 때 임시 변수를 둘 필요가 없다.
print(a) # 4
print(b) # 3

 

(3) 가비지 콜렉션

- del을 통해 객체를 메모리에서 없앨 수 있다.

dic={"name":"Jooyeok", "age": 26, "lecture":[126231, 126232, 126245]}
print(dic) # {'name': 'Jooyeok', 'age': 26, 'lecture': [126231, 126232, 126245]}
del dic
print(dic) # NameError: name 'dic' is not defined. Did you mean: 'dir'? (에러 발생)

 

(4) 깊은 복사와 얕은 복사

- 두 변수가 깊은 복사 관계면 한 쪽의 변수값을 변경했을 때 다른 한 쪽의 변수값도 같이 변경된다. =를 통해 깊은 복사가 가능하다.

a=[1,2,3]
b=a
a[2]=4
print(b) # [1, 2, 4]
print(a==b) # True (값 비교)
print(a is b) # True (객체 비교)

 - 두 변수가 얕은 복사 관계면 한 쪽의 변수값을 변경하더라도 다른 한 쪽의 변수값이 변경되지 않는다. [:] 또는 copy 모듈을 통해 얕은 복사가 가능하다.

from copy import copy

a=[1,2,3]
b=copy(a) # b=a[:]와 동일
print(a==b) # True (값 비교)
print(a is b) # False (객체 비교)

 

 

● 참고 자료 : Do it! 점프 투 파이썬

 

 

 

 

 

반응형

댓글