파이썬 - 데이터 타입, 모듈

‎육란·2023년 9월 18일

파이썬 알고리즘

목록 보기
3/8

https://wikidocs.net/68

오늘도 파이썬 알고리즘 공부에 앞서 파이썬 기초 문법 공부를 하려고 한다.
지난번에는 변수, 리스트, 반복문, 조건문, 함수에 대해 배웠다.

이번에 공부할 내용은 데이터 타입(문자열, 리스트, 튜플, 딕셔너리, 세트)과 모듈이다.

4. 데이터 타입

4.1 자료형

자료형은 type() 함수를 사용하면 자료형을 쉽게 확인할 수 있다.

>>> type(6)                      # 정수
<type 'int'>
>>> type('A')                    # 문자열
<type 'str'>

파이썬의 자료형은 크게 숫자, 시퀀스, 매핑 등으로 나눌 수 있다.

숫자

숫자에는 우리가 알고 있는 int형, float형, complex형(복소수형)이 있다.

시퀀스

문자열 str, 리스트 list, 튜플 tuple, 사용자 정의 클래스가 시퀀스에 속한다.

매핑

딕셔너리 dict는 key와 value의 짝으로 이루어진다.
이런 것을 매핑이라고 한다.

참, 거짓을 표현하는 bool이다.

세트

집합을 표현하는 set이다.

4.2 문자열과 리스트

문자열

문자열에서는 인덱스를 이용하여 글자를 가리킬 수 있다.

숫자를 문자열로 바꾸고 싶다면 str()을 이용하면 된다.

>>> str(my_int)
'123'

역으로 문자열을 숫자로 바꾸고 싶을 때는 int()float() 함수를 사용하면 된다.

  • 문자열의 인덱스를 이용해서 문자열을 써는 방법을 '슬라이싱'이라고 한다.
>>> x = 'banana'
>>> x[0]            # 0번 글자는?
'b'
>>> x[2:4]          # 2번부터 4번 앞(3번)까지는?
'na'
>>> x[:3]           # 처음부터 3번 앞(2번)까지는?
'ban'
>>> x[3:]           # 3번부터 끝까지는?
'ana'

이렇게 [n:m] 등을 이용하여 슬라이싱할 수 있다.
이는 n부터 m-1까지의 요소를 추출한다.
한 부분을 생략하면 끝까지를 의미한다.

>>> x = 'banana'
>>> x = 'n' + x[1:]
>>> x
'nanana'

[:]는 전체를 의미한다.

  • find() 함수를 사용하여 어떤 글자가 몇 번째 자리에 있는지 알 수 있다.
>>> s = "hello Python!"
>>> s.find('P')
6
  • rstrip() 함수를 사용하여 문자열 양끝의 공백을 제거할 수 있다.
>>> h = 'hello '
>>> h.rstrip()
'hello'
  • split() 함수를 이용해 문자열을 분할한 리스트를 생성할 수 있다.
>>> s.split()
['hello', 'Python!']
>>> s.split()[0]
'hello'

리스트

리스트에는 원소의 순서대로 인덱스(index)가 있고, 시작 인덱스는 0이다.
인덱스를 이용해 리스트의 원소에 새로운 값을 넣을 수도 있다.

>>> prime[0] = 1
>>> prime
[1, 3, 5]

또한 리스트에 리스트를 집어넣을 수도 있다.

>>> orders = ['potato', ['pizza', 'Coke', 'salad'], 'hamburger']
>>> orders[1]
['pizza', 'Coke', 'salad']
>>> orders[1][2]
'salad'

마찬가지로 리스트를 사용해서 행렬을 표현할 수도 있다.

  • append() 함수를 사용하면 리스트에 원소를 추가할 수 있다.
>>> prime = [3, 7, 11]  # 3, 7, 11을 원소로 갖는 리스트 prime을 만듦
>>> prime.append(5)      # prime에 원소 5를 추가
>>> prime
[3, 7, 11, 5]
  • sort() 함수를 사용하면 간단하게 정렬을 할 수 있다.
>>> prime.sort()           # prime을 원소 크기 순으로 정렬
>>> prime
[3, 5, 7, 11]
  • insert() 함수를 사용하면 원하는 인덱스에 원소를 삽입할 수 있다.
>>> prime.insert(0, 2)
>>> prime
[2, 3, 5, 7, 11]
  • del을 사용하면 인덱스의 원소를 삭제할 수 있다.
>>> del prime[4]           # prime의 4번 원소를 삭제
>>> prime
[2, 3, 5, 7]
  • pop()을 사용해 원소를 삭제할 수도 있다. 이 함수는 리스트에서 삭제한 원소를 반환하므로 변수로 받아서 나중에 사용할 수 있다.
>>> a = prime.pop() # 삭제한 원소를 a 변수로 받음
>>> prime
[2, 3, 5]
>>> a
7
  • 정수 리스트 값들의 합을 구하고 싶다면, sum() 함수를 이용한다.
>>> one_to_ten = list(range(1, 11))
>>> one_to_ten
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> sum(one_to_ten)
55

4.3 튜플

튜플은 다른 자료형의 요소를 순서대로 저장할 수 있다.

기본적으로는 소괄호로 사용하여 정의한다.

>>> c = 10
>>> d = 20
>>> c, d = d, c                 
>>> print(c, d)
20 10

튜플은 생성한 후에 요소를 변경할 수 없다.
때문에 문자열의 [n:m] 방식으로 오려붙이는 방법을 써야 한다.

튜플을 리스트로, 리스트를 튜플로 쉽게 바꿀 수 있다.

>>> p = (1, 2, 3)
>>> q = list(p)                  # 튜플 p로 리스트 q를 만듦
>>> q
[1, 2, 3]
>>> r = tuple(q)                 # 리스트 q로 튜플 r을 만듦
>>> r
(1, 2, 3)

4.4 딕셔너리

딕셔너리 자료형은 키 key와 값 value의 쌍으로 이루어진다.

정의와 사용은 다음과 같이 한다.

>>> smalldic = {'dictionary': 'reference', 'python': 'snake'}
>>> smalldic['python']        # 포켓용 사전아, 'python'이 뭐니??
'snake'                         
>>> smalldic
{'dictionary': 'reference', 'python': 'snake'}
  • del 을 사용하여 원소를 삭제할 수 있다.
>>> del smalldic['dictionary']
  • .keys()를 이용하여 딕셔너리의 키들을 얻을 수 있다.
>>> family.keys()
dict_keys(['mom', 'dad', 'baby'])
  • .values()을 사용하여 딕셔너리의 값들을 얻을 수 있다.
>>> family.values()
dict_values(['Kim', 'Choi', 'Choi'])
  • items()을 사용하여 딕셔너리의 원소(키/값 쌍)을 얻을 수 있다.
>>> family.items()
dict_items([('mom', 'Kim'), ('dad', 'Choi'), ('baby', 'Choi')])
  • in을 사용하여 딕셔너리에 어떤 키가 있는지 없는지 알아볼 수 있다. bool 값을 반환한다.
>>> 'dad' in family
True
>>> 'sister' in family
False

4.5 세트

세트 set는 '집합'을 표현한다.
세트는 중괄호를 사용한다.

>>> fruits = {'apple', 'banana', 'orange'}

빈 세트를 만들어 놓을 수도 있다.

>>> companies = set()

빈 세트를 먼저 만들어 놓은 후에, 이후에 세트를 정의할 수 있다.

세트는 중복 원소를 갖지 않는다.
또한 원소의 순서가 유지되지 안는다.

  • add()를 사용하여 원소를 추가할 수 있다.
>>> fruits.add('mango')
>>> fruits
{'orange', 'apple', 'mango', 'banana'}
  • 세트를 이용해 집합 연산을 사용할 수 있다.
>>> fruits & companies           # 교집합
{'apple'}
>>> fruits | companies           # 합집합
{'apple', 'mango', 'microsoft', 'orange', 'google', 'banana'}

집합끼리 뺄셈도 할 수 있다.

5. 모듈

5.1 모듈이란

모듈은 남이 만들어 놓은 부품을 사용하는 것과 같다.
쉽게 설명하기 위해 예시를 들어보겠다.

  • math모듈
>>> import math
>>> math.sqrt(2)                   # 2의 제곱근
1.4142135623730951
>>> math.sqrt(3)                   # 3의 제곱근
1.7320508075688772
>>> math.sqrt(4)                   # 4의 제곱근
2.0
  • calender 모듈
>>> import calendar
>>> calendar.prmonth(2013, 7)
     July 2013
Mo Tu We Th Fr Sa Su
 1  2  3  4  5  6  7
 8  9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
  • tkinter 모듈
>>> from tkinter import *
>>> widget = Label(None, text='I love Python!')
>>> widget.pack()

5.2 모듈 가져오기

모듈을 가져오는 것(import)에는 두 가지 방법이 있다.
두 가지 특성을 잘 이해하고 상황에 맞게 사용하면 된다.

  1. import 모듈
    이 방법은 모듈 전체를 가져온다.
    모듈 내의 변수를 사용하기 위해서 모듈.변수의 형식으로 써야 한다.
>>> import tkinter
>>> tkinter.widget = tkinter.Label(None, text='I love Python!')
>>> tkinter.widget.pack()
  1. from 모듈 import 이름
    이 방법은 모듈 내에서 필요한 것만 찍어서 가져오는 방법이다.
    모듈의 변수를 바로 사용할 수 있다.
>>> from tkinter import *
>>> widget = Label(None, text='I love Python!')
>>> widget.pack()
  • del 모듈을 사용하여 불로온 모듈을 지울 수 있다.

  • reload를 하여 한 번 임포트한 모듈을 다시 불러올 수 있다.

from importlib import reload
reload(모듈)

5.3 여러 가지 모듈

sys

sys 모듈은 파이썬 인터프리터를 제어할 수 있는 방법을 제공한다.
sts 모듈을 사용하여 프롬프트를 바꿀 수 있다.

>>> import sys
>>> sys.ps1                                  # 현재의 프롬프트는?
'>>> '
>>> sys.ps1 = '^^; '                         # 요걸로 바꿔!
^^; print('hello')
hello
^^; 5 * 3
15
^^;

OS

os 모듈은 운영체제를 제어할 수 있다.

  • os 모듈의 getcwd()는 현재 작업 디렉터리를 알려준다.
Python 3.8.5 (tags/v3.8.5:580fbb0, Jul 20 2020, 15:43:08) [MSC v.1926 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.getcwd()
'C:\\Users\\Yong Choi\\AppData\\Local\\Programs\\Python\\Python38-32'
  • listdir() 은 현재 디렉터리에 어떤 파일들이 있는지 알려준다.
>>> os.listdir()
['DLLs', 'Doc', 'img_read.py', 'include', 'Lib', 'libs', 'LICENSE.txt',
'NEWS.txt', 'python.exe', 'python3.dll', 'python38.dll', 'pythonw.exe',
'Scripts', 'tcl', 'Tools', 'vcruntime140.dll']
  • chdir() 을 이용해 디렉터리 이동을 할 수 있다.
>>> os.chdir('libs')
>>> os.getcwd()
'C:\\Users\\Yong Choi\\AppData\\Local\\Programs\\Python\\Python38-32\\libs'

상위 디렉터리는 ..으로 나타낸다.

re

re 모듈은 정규 표현식을 이용해 문자열을 다룰 수 있다.

마침표는 문자 아무거나 1개를 뜻하고, 별표(*)는 0개 이상의 문자를 뜻한다.

>>> import re, glob
>>> p = re.compile('.*p.*n.*')
>>> for i in glob.glob('*'):
...     m = p.match(i)
...     if m:
...             print(m.group())
...
pycon.ico
python.exe
pythonw.exe
w9xpopen.exe

webbrowser

웹 브라우즈를 할 수 있는 webbrowser 모듈도 있다.

>>> import webbrowser
>>> url='http://www.python.org/'
>>> webbrowser.open(url)
True
>>>

random

random 모듈은 난수를 만들어 준다.

  • random() 함수는 0 이상 1 미만의 난수를 생성한다.
>>> import random
>>> random.random()
0.90389642027948769
  • randrange() 함수를 이용해 정수 난수의 범위를 지정해줄 수 있다.
    randrange(n, m) 은 n 이상 m 미만의 정수 난수이다.
>>> random.randrange(1,7)
6
>>> random.randrange(1,7)
2
  • shuffle() 함수는 시퀀스를 뒤죽박죽 섞어놓는다.
>>> abc = ['a', 'b', 'c', 'd', 'e']
>>> random.shuffle(abc)
>>> abc
['a', 'd', 'e', 'b', 'c']
>>> random.shuffle(abc)
>>> abc
['e', 'd', 'a', 'c', 'b']
  • choice() 함수는 아무 원소나 하나를 뽑아준다.
>>> abc
['e', 'd', 'a', 'c', 'b']
>>> random.choice(abc)
'a'
>>> random.choice(abc)
'd'

>>> menu = '쫄면', '육계장', '비빔밥'
>>> random.choice(menu)
'쫄면'
profile
프로그래밍 공부 블로그

0개의 댓글