파이썬 프로그래밍를 읽고, 정리한 글입니다.
목차
· 파이썬의 자료형
· 변수의 이해
· 주석, 연산자
· 여러 개의 값을 갖는 자료형
파이썬의 자료형
자료형이란?
· 프로그램을 실행하다 보면 자료(데이터)를 처리하는 작업을 자주 한다. 자료를 기억 장소에 저장하고 활용할 때 표현하는 타입(형)을 자료형이라고 한다.
· 숫자, 문자, 불린과 같이 여러 종류의 자료를 식별하는 분류이며, 해당 자료가 표현할 수 있는 값, 해당 자료에서 수행할 수 있는 명령, 데이터의 믜미, 해당 자료의 값을 저장하는 방식을 결정한다.
파이썬 자료형의 종류
종류 | 설명 | 표현 예 |
int | · 정수 자료형으로 양수, 음수의 부호를 갖는다. · 기억 장소의 크기와 기억 범위는 무제한이다. |
123, -12, 0 |
float | · 실수 자료형으로 부동소수점 수이다. · 크기는 8Byte, 기억 범위는 4.9 x 10^-324 ~ 1.8 x 10^308 |
· 소수점 표현: 12.3, -0.56 · 과학적 지수 표현: 2.3E10 |
complex | · 복소수 자료형으로 실수와 허수로 구성된다. · 크기는 16Byte, 기억 범위는 float와 가탇. |
2 + 3.7j |
bool | · 참, 거진 두 가지 값을 표현하는 방식의 진리값을 처리한다. | y, yes, True, on, 1, n, no, False, off, 0 |
str | · 문자열 자료형으로 일련의 유니 코드의 문자, 단어 집합을 의미한다. · 기억 장소의 크기와 기억 범위는 무제한이다. · 문자열은 큰따옴표나 작은 따옴표로 둘러 준다. · 따옴표를 연속적으로 세 개를 두를 수도 있다. |
'korea', "korea", "123" "'String multiplelines'", """String multiplelines""" |
list | · 리스트 자료형으로 순서를 가진다. · 혼합 형태의 자료를 포함할 수 있다. |
[1.0, 'string', True] |
set, frozenset | · 순서가 없는 집합형 자료형이다. · 자료의 중복을 허용하지 않는다. · set은 수정이 가능하다. · frozenset은 수정이 불가능하다. |
{1.0, 'string'} frozenset([1.0, 'string']) |
tuple | · 혼합 형태의 자료를 기억할 수 있는 자료형으로 읽기 전용이다. | (1.0 'string', True) |
dict | · 연관 배열로 키와 값이 쌍으로 구성된 집합협 자료형이다. | {'key1':'value1', 'key2':'value2'} |
- 자료형 중 str, list, set, tuple, dict는 여러 개의 값(요소)를 묶어 하나의 변수로 활용하기 편리하며, 묶음 자료형이라 한다.
· 파이썬은 자료형을 성격이나 기능에 따라 분류할 수 있다.
자료 저장 방법에 따른 분류 | 한 개의 값 또는 여러 개의 값을 요소로 묶어 사용하는지에 따라 나뉜다. | |
직접형 | int, float, complex, bool | |
순서형 | str, list, tuple | |
매핑형 | dict | |
자료 변경 가능성에 따른 분류 | 기억된 값을 수정할 수 있는지에 따라 나뉜다. | |
변경 가능형 | list, dict, set | |
변경 불가능형 | int, float, complex, bool, tuple, str |
- 파이썬은 함수 중심의 언어이지만, 자바 등의 객체 중심의 언어처럼 클래스를 이용해 사용자가 자료형을 직접 정의할 수도 있다.
type 함수
· type 함수는 자료형을 확인할 수 있다.
print(7, type(7))
print(7.2, type(7.2))
print(3 + 4j, type(3 + 4j))
print(True, type(True))
print('abc', type('abc'))
print([1], type([1]))
print((1), type((1)))
print({1}, type({1}))
print({'key':1}, type({'key':1}))
진수
· 진수란 얼마만큼의 수를 증가시킨 후에 자릿수를 올릴 것인가라는 의미다.
· 파이썬의 진법 변환 함수: oct, hex, bin
print(10, oct(10), hex(10), bin(10))
print(10, 0o12, 0xa, 0b1010)
- 위 함수 각각은 10진수를 8진수로, 10진수를 16 진수로, 10진수를 2진수로 변환해 값을 반환한다.
- 반대로 8진수 0o12, 16진수 0xa, 2진수 0b1010을 적어 주면 각각의 값을 10진수로 변환해 준다.
- 8진수는 숫자 앞에 0o(숫자0 알파벳o), 16진수는 숫자 앞에 0x, 2진수는 숫자 앞에 0b를 붙인다.
식별자
· 식별자는 변수, 함수, 클래스, 모듈 또는 다른 개체를 식별할 때 사용하는 이름이다.
- 따라서 이름만 보아도 뜻을 알 수 있도록 지정하는 것이 코드를 읽는 데 도움이 된다.
· 식별자 작성 규칙(명명 규칙):
1. 알파벳으로 시작하고 밑줄(_), 숫자(0~9)를 사용할 수 있다.
2. 한글을 사용할 수 있으나 권장하지 않는다.
3. !, @, #, $, % 등의 특수 문자는 식별자로 사용할 수 없다.
4. 대소문자를 구분한다.
5. 가독성을 위해 의미 있는 단어를 쓰는 것이 바람직하다.
6. 파이썬에 의해 약속된 예약어(keyword)는 사용하지 않는다.
예약어
· 예약어(keyword)란 특정 기능을 수행하도록 예약되어 있는 단어를 말한다.
· 예약어는 모두 소문자로 되어 있다.
· 예약어의 종류: and, exec, not, assert, finally, or, break, for, pass, class, from, print, is, continue, global, raise, def, if, return, del, import, try, elif, in, while, else, with, except, yeild 등
변수의 이해
· 파이썬은 동적 타이핑 언어이므로 모든 변수가 값 자체를 기억하지 않고, 객체의 주소를 기억하여 이 주소를 참조해 별도로 저장된 값들을 읽어 처리한다. 그래서 변수를 사용할 때 자료형을 먼저 선언하지 않고, 변수가 참조하는 객체의 성격에 의해 자료형이 결정된다.
- 즉, 파이썬의 변수는 자동으로 자료형이 결정된다.
· 파이썬과 다르게 일반적으로 많이 사용하는 객체 지향 프로그래밍 언어(예: 자바)는 변수를 기본 변수와 참조 변수로 나누어 처리한다.
- 기본 변수: 상숫값을 직접 저장하고 있는 기억 장소
- 참조 변수: 생성된 객체의 주소를 기억하고 있는 기억 장소
· 변수에 값(객체의 주소)를 할당할 때는 치환 연산자 '=' 기호를 사용한다.
ex) >>> a = 3
· 객체란 정수, 실수, 문자 등 파이썬에서 사용되는 모든 자료형으로 만들어질 수 있으며, 이들은 메모리 안에서 객체로 생성되어 메모리에 기억되며 자동으로 고유 주소를 부여받는다.
- 부여받은 객체의 주소를 변수에 담아두었다가, 그 변수가 기억한 주소를 이용하여 객체의 값을 얻게 된다.
· id 함수를 통해 객체의 주소를 확인할 수 있다.
- 사용법: id(변수명)
· is 연산자를 통해 동일한 객체를 가리키고 있는지 확인 할 수 있고, == 연산자를 통해 참조하는 값을 비교할 수 있다.
a = 1을 처리하는 순간 메모리 어딘가에 1이라는 정수형 객체가 생성되고, 변수 a는 1이 저장된 객체의 메모리 주소를 기억한다.
다음에 b = 1을 하면 객체가 새로 만들어지는 것이 아니라 메모리 절약 차원에서 동일한 객체 1을 가리킨다.
위의 경우 a is b는 주소가 같아 True를 출력하고, a == b 또한 같은 값은 가지므로 True가 출력된다.
is와 ==의 결과가 다른 경우를 살펴보자.
a, b는 여러 개의 값을 갖는 리스트형 변수로 선언되었다. 두 변수는 같은 값을 갖지만, 파이썬의 특성으로 다른 객체로 생성된다.
그래서 a is b는 두 객체의 주소가 다르므로 False, a == b는 두 변수의 값이 같으므로 True가 된다.
· 파이썬은 다음과 같이 변수에 주소를 치환할 수 있다.
· 여러 변수에 하나의 값을 한 번에 할당할 수 있다.
· 여러 개의 변수에 여러 개의 값을 차례로 할당할 수 있다.
변수 이름 규칙
· 변수명은 의미가 있는 단어를 사용하는 것을 권장한다. 변수 이름만으로 어떤 값이 기억되어 있는지 짐작할 수 있어야 소스 코드의 가독성이 좋아진다.
· 변수 이름은 앞서 설명한 식별자 작성 규칙을 따른다.
올바른 예 | 잘못된 예 |
A abc_def abc_123 _kor __eng my_data |
123 ^12 %my my$kor @my #my |
· 변수 이름으로 특정 기능을 수행하기 위해 지정한 키워드(예약어)를 사용하면 안 된다.
- 키워드 목록 확인하기: import 명령으로 keyword 모듈을 가져온 후 keyword.kwlist를 사용한다.
문자열 표현하기
· 문자열을 표현할 때는 대상 문자를 따옴표로 감싸서 사용한다. 작은따옴표(' '), 큰따옴표(" "), 삼중따옴표 (""" """)를 사용할 수 있다.
- 삼중따옴표는 여러 줄에 걸쳐 문자열을 사용할 수 있어 긴 문자열을 표현하기에 편리하다.
print 함수 사용하기
· print 함수를 사용하면 자료를 콘솔에 출력할 수 있다.
- 한 개 또는 여러 개의 값을 동시에 출력할 수 있다.
- 출력 서식을 사용하여 출력 폼이 있는 형태로 출력할 수도 있다.
· print 함수는 출력 후 자동으로 줄 바꿈이 이루어진다. 줄 바꿈 없이 한 줄에 연속해서 출력하려면 print 함수에 end = '구분자 기호' 속성을 추가로 적어준다.
print(1, 2, end = ' ')
print(3)
- 줄 바꿈 없이 한 줄에 출력하려면 대화형 모드가 아닌, 스크립트 모드에서 실습해야 결과를 제대로 확인할 수 있다.
print 함수에서 출력용 서식 사용하기
· 출력 결과를 멋지게 만들어 print 함수에 날개를 달아주는 문자열 포매팅을 알아보자.
- 문자열 포매팅(string formatting): 문자열을 만들 때 원하는 위치에 특정한 값(변수)을 삽입해서 문자열을 그때그때 동적으로 출력하는 것이다.
1. format
· 사용법: format(정수 또는 실수, '전체 자릿수.소수점 이하 자릿수<서식기호>')
· 예시1
- 전체 10자리를 확보한 후 소수점 이하 3자리만 출력하고 나머지는 반올림한다.
-'10.3f'에서 f는 실수를 의미한다.
· 예시2
- 정수에 대한 자릿수 지정으로, 10자리를 확보한 후 데이터 3자리를 제외하고 앞의 7자리는 공백으로 채운다.
- '10d'에서 d는 정수를 의미한다.
· 예시3
- 매우 크거나 작은 숫자를 간결하게 표현하기 위해 과학적 표기법을 출력한다.
2. %-formatting
· % 연산자를 사용하는 방법으로 출력 서식에 숫자, 문자열을 대입할 수 있다.
- 주로 C 언어에서 사용되던 방법으로 코드가 길어지면 가독성이 떨어지는 단점이 있다.
- 서식기호 예: %d, %f, %s 등
· 사용법: print('일반 메시지 %서식기호'%(서식기호 매핑자료))
서식기호 | 대응 자료 |
%s | 문자열(string)과 매핑 |
%c | 문자 1개(character)와 매핑 |
%d | 정수 |
%f | 실수 |
%% | Literal %('%'를 문자열에 포함해 출력하고자 할 때) |
· 예시
3. '{ }'.format()
· %-formatting 표현가 출력 결과는 같지만, 좀 더 가독성이 좋다.
· 사용법: {매핑순서}.format()
· 예시1
- 서식기호 {0번째}에 '마우스', {1번째}에 5000이 서로 짝을 이루어 출력된다.
· 예시2
- 서식과 대응 자료의 개수가 일치하면 {}안의 매핑 순서는 생략할 수 있다.
· 예시3
- 출력 순서보다 대응 자료가 많으면 대응 자료의 일부는 무시된다. 모자라면 에러가 발생된다.
· 예시 4
- 출력 서식 {} 안의 매핑 순서가 동일한 것이 복수이면 복수 개만큼 대응 자료가 출력된다.
· 예시 5
- 네 자리 이상의 숫자를 알아보기 쉽게 표현하기 위해서 세 자리마다 쉼표를 찍을 수 있다.
4. f-Strings
· '{}'.format() 방법과 비슷하고, 다른 방법에 비해 코드가 간결하다.
· 사용법: f{변수명 또는 데이터}
- 변수값에 값을 대입한 후 중괄호 {}에 변수명을 넣어 주고, 코드 처음에 f 또는 F를 사용한다.
· 예시 1
· 예시 2
- 문자, 숫자, 연산식, 함수, 메서드 등도 사용할 수 있다.
이스케이프 코드
· 백슬래시(\) 문자를 이용하면 특별한 처리를 할 수 있다. 이때 사용하는 코드는 이스케이프 코드 또는 이스케이프 문자라고 부른다.
- 예: print 함수에 \n을 적어 두면 프로그램 실행 도중 엔터키를 누른 효과를 볼 수 있다.
이스케이프 코드 | 설명 |
\n | 줄 바꿈 처리 |
\t | 탭키 처리 |
\r | 캐리지 리턴(커서를 행의 맨 앞으로 이동) 처리 |
\f | 프린터로 출력할 때 폼 피드 처리 |
\b | 백스페이스 처리 |
\000 | 널 문자 처리 |
\\ | 문자 '\' 처리 |
\' | 작은따옴표(') 처리 |
\" | 이중 인용부호(") 처리 |
키보드(표준 입력장치)로 자료 입력받기
· input 함수는 키보드로부터 입력된 값을 문자열로 받아들인다.
· 예시 1
위 코드를 실행하면 이름을 입력하라면 메시지가 출력되고, 키보드로부터 문자열 자료를 입력받기 위한 대기 상태가 된다.
키보드 자료를 입력하면 name 변수에 입력 자료가 기억된다.
· 예시 2
- input 함수는 키보드로 입력된 모든 자료를 문자열로 인식한다. 그래서 입력된 숫자 형태의 문자열을 숫자형으로 변환하려면 int 함수를 사용한다.
- 숫자를 문자열로 변환할 때는 str 함수를 사용하면 된다.
주석과 연산자
주석 사용하기
· 주석 처리한 부분은 실행되지 않고, 소스 코드에 대한 메모 역할을 한다.
· 사용법:
1. 여러 줄 주석: 큰따옴표 세 개 """주석내용""" 또는 작은따옴표 세 개 '''주석내용'''과 같이 사용한다.
2. 한 줄 주석: # 이후부터 행의 끝까지 주석으로 처리된다.
'''
여러 줄 주석1
'''
"""
여러 줄 주석2
"""
var = 'variable' # 한 줄 주석
연산자 사용하기
· 연산자는 덧셈이나 뺄셈 등을 표현하기 위해 사용하는 약속된 기호이며, 연산자가 적용되는 값을 피연산자라고 한다.
치환(할당) 연산자
· 치환 연산자는 '='을 중심으로 오른쪽에 잇는 값 또는 객체의 주소를 왼쪽에 있는 변수가 기억하도록 한다.
- 객체와 변수는 복수도 가능하다.
· 예시 1
v1 = 3
v1 = v2 = v3 = 5 # 복수의 기억 장소를 선언하면서 초깃값을 저장한다.
print(v1, v2, v3)
v1, v2 = 10, 20 # 복수의 변수에 복수의 값을 매핑한다.
print(v1, v2)
v2, v1 = v1, v2 # 두 개의 기억 장소에 참조값이 교환 처리된다.
print(v1, v2)
· 예시 2
v1, *v2 = 1, 2, 3, 4, 5 # 값 할당 packing 연산 수행
print(v1)
print(v2)
print()
*v1, v2 = 1, 2, 3, 4, 5 # packing을 위한 변수의 위치를 변경
print(v1)
print(v2)
print()
*v1, v2, v3 = 1, 2, 3, 4, 5 # 변수 v1만 pakcing 처리
print(v1)
print(v2)
print(v3)
print()
v1, *v2, v3 = 1, 2, 3, 4, 5 # 변수 v2만 pakcing 처리
print(v1)
print(v2)
print(v3)
print()
# v1, *v2, *v3 = 1, 2, 3, 4, 5 <- 에러: * 연산자는 복수 사용은 불가능하다.
- 파이썬에서는 변수에 복수의 값을 할당하기 위한 packing 연산을 할 수 있다. 변수명 앞에 * 연산자를 붙이면 된다.
산술 연산자(arithmetic operators)
· 정수 및 실수 연산을 한다.
산술 연산자 | 기능 | 사용 예 |
|
+ | 더하기 | c = a + b | c += a |
- | 빼기 | c = a - b | c -= a |
* | 곱하기 | c = a * b | c *= a |
/ | 나누기(실수 반환) | c = a / b | c /= a |
% | 나누기(나머지 반환) | c = a % b | c %= a |
// | 나누기(몫을 반환) | c = a // b | c //= a |
** | 거듭제곱(지수 승) | c = a ** b | c **= a |
- 나누기 연산에는 몫과 나머지를 튜플형으로 반환해 주는 divmov 함수도 있다.
관계 연산자(relational operators)
· 관계 연산자 또는 비교 연산자(comparison operators)라고 하며 반환값은 True 또는 False이다.
관계 연산자 | 기능 |
A > B | A가 B보다 크다. |
A < B | A가 B보다작다. |
A == B | A와 B가 서로 같다. |
A <= B | A가 B와 같거나 작다. |
A >= B | A가 B와 같거나 크다. |
A != B | A는 B와 같지 않다. |
논리 연산자(logical operators)
· 논리값을 판단해 주는 연산자로 True 또는 False를 반환한다. if 문의 조건으로 주로 사용된다.
논리 연산자 | 기능 | 사용 예 |
x and y | 논리 곱 | if a and b |
x or y | 논리 합 | if a or b |
not x | 논리 부정 | if not(a and b) |
비트 연산자(bitwise operators)
· 한 개 혹은 두 개의 이진수에 대해 비트 단위로 적용되는 연산을 한다.
비트 연산자 | 기능 | 사용 예 | |
@ | 비트 단위 and | bin(0b1101 & 0b1001) | 3 & 9 |
^ | 비트 단위 xor | bin(0b1101 ^ 0b1001) | 3 ^ 9 |
| | 비트 단위 or | bin(0b1101 | 0b1001) | 3 | 9 |
~ | 비트 단위 not | bin(~0b1101) | ~3 |
<< | 좌측 시프트 | a = 8; a << 2 (결과: 32) |
|
>> | 우측 시프트 | a = 8; a >> 2 (결과: 2) |
- bin 함수는 10진수를 2진수로 변환해 값을 반환한다.
연산자 우선순위
- 산술 연산자 중에는 거듭 제곱 > 곱하기, 나누기 > 더하기, 빼기 순으로 우선 순위가 높다.
- 논리 연산자의 경우 not > and > or 순으로 우선 순위가 높다.
- 같은 등급의 연산자가 여러 개 있을 경우 왼쪽에 있는 연산자부터 처리한다.
여러 종류의 연산자 실습하기
# 산술 연산자
print(5 + 3, 5 - 3)
print(5 * 3, 5 / 3)
print(5 // 3, 5 % 3)
print(5 ** 3)
print('몫과 나머지: ', divmod(5, 3))
print('연산 우선순위:', 3 + 5 * 5, (3 + 4) * 5)
print()
# 관계(비교) 연산자
print(5 > 3, 5 == 3, 5 != 3)
print()
# 논리 연산자
print(5 > 3 and 4 < 3, 5 > 3 or 4 < 3, not(5 >= 3))
print()
# 문자열 더하기 연산
print('t' + 'e' + "d") # +연산자로 문자열을 더할 수 있다.
print('ted' * 3) # *연산은 더하기를 해당 수만큼 진행한다.
- divmod는 연산자는 아니지만, 나누기와 관련된 함수다.
bool 함수
· bool 함수는 상수값에 따라 True 또는 False를 반환한다.
print('불린1:', bool('Hello'), bool(1), bool(-2), bool(3.2))
print('불린2:', bool(0), bool(None), bool(''), bool([]), bool(()), bool({}))
- bool 함수는 0, None, 빈 문자열, 리스트, 튜플, 딕셔너리의 경우 False로 취급한다.
▶ None은 상숫값 null을 의미한다. 0이나 빈 문자열을 의미하지 않는다.
▶ None == 1 또는 None == 'abc' 같이 None을 비교 구문에 사용해도 모두 False가 되니 사용하지 않도록 주의하자.
- 나머지의 경우True로 취급한다.
Raw String 적용을 위해 r문자 사용하기
· 파이썬에서는 정규표현식에서 사용하는 r 선행 문자를 이용하면 프로그램을 실행할 때 이스케이프 코드를 처리하지 않고 그냥 문자열의 일부로 취급한다.
· 사용법: r'문자열'
· 예시 1 - 탭키 무시하기
· 예시 2 - 경로 지정 문제 해결하기
명령문 여러 줄 적기
· 명령문이 길 경우 \(백슬래시)를 사용해 명령문을 다음 줄에 계속 이어서 적을 수 있다.
· 여러 개의 값을 기억하는 묶음 자료형(예: 리스트)에 포함된 요소는 \를 사용해도 되고, 사용하지 않아도 된다.
여러 개의 값을 갖는 자료형
문자열 자료형
· 문자열 자료형(str type)은 문자들을 표현할 수 있는 자료형이다.
· 문자열 자료형의 특징:
1. 작은따옴표(' ')나 큰따옴표(" ")로 둘러싼 문자들의 집합이다.
2. 문자열 내 문자 요소들은 순서가 있는 시퀸스 자료형이다.
3. 대괄호([ ]) 안의 표현식을 인덱스라고 부르며, 이는 문자의 순서를 가리킨다.
4. 슬라이싱(인덱스의 범위로 지정되는 문자열의 일부 얻기) 처리를 할 수 있다.
5. 문자열 중 일부의 문자를 수정할 수 없다.
· 예시 1
a = 'hi' # 변수 a는 'hi' 문자열이 저장된 객체의 주소를 기억한다.
a = '안녕' # 변수 a는 이제 'hi' 객체 주소가 아닌 '안녕' 문자열 객체 주소를 기억한다. 이것은 문자열을 수정하는 것이 아니라 새로운 주소를 기억하는 것이다.
print(a)
· 예시 2
b = 'Python'
print(b[1])
print(b[-1])
- 변수 b에 문자열 'Python'을 저장한다.
- b[1]에는 변수 b의 첫 번째 문자가 추출된다. 이를 인덱싱이라 부르며, 특정 위치의 문자를 얻을 수 있다.
- 인덱스는 0부터 시작하고, 인덱스를 음수로 주면 검색 순서가 뒤에서부터 시작된다.
· 예시 3
- 문자열의 일부를 수정하려고 하면 에러가 발생한다.
슬라이싱
· 슬라이싱이란, 연속적인 객체 요소를 갖는 자료형(리스트, 튜플, 문자열)들에 대해 지정된 범위를 선택해 객체의 일부분을 얻어내는 방법 및 표기법을 의미한다.
- 이러한 자료형은 요소를 기억 장소에 기억시킨 후 각 요소가 기억된 위치를 순서로 접근할 수 있다(인덱싱).
· 슬라이싱을 하면 선택된 요소로 새로운 객체를 생성한다.
· 슬라이싱 형식: 문자열 변수명[start : end : step]
- start, end, step 모두 양수와 음수를 가질 수 있다.
- start: 슬라이싱을 시작할 위치
- end: 슬라이싱을 끝낼 위치로 end 번째는 출력되지 않는다.
- step: 증가치로 요소를 몇 개씩 끊어서 가져올지와 방향을 정한다. 증가치가 1인 경우 생략할 수 있다.
· 예시
- 인덱스에 범위를 설정할 수 있다. 위에서는 0이상 1미만의 문자, 0이상 2미만의 문자를 출력한다.
- 인덱스 범위의 시작 값만 있으면, 그 위치부터 문자열 끝까지 출력한다.
- 인덱스 범위의 끝 값만 있으면, 그 위치 전까지의 문자를 출력한다.
- 인덱스 값이 음수이면 뒤에서부터 인덱스 번호가 부여되고, 뒤에서부터 범위만큼의 문자를 출력한다.
- 마지막에 증갓값을 주면 증갓값만큼 건너뛰며 출력된다.
- 범위 지정을 하지 않으면 전체를 출력한다.
- 시작 위치와 끝 위치는 지정하지 않고 증값값으로 -1을 주면 전체를 거꾸로 출력한다.
문자열 관련 주요 함수
· 문자열 자료형과 관련된 주요 함수들의 사용법을 알아보자.
다음과 같은 문자열을 기억하고 있는 변수 a가 있다고 가정하자.
함수 | 역할 | 실행 결과 |
a.count('e') | 문자열에서 'e'와 일치하는 문자의 개수를 반환한다. | 1 |
a.find('e') | 문자열에서 문자 'e'가 처음으로 나온 위치를 반환한다. 없으면 -1을 반환한다. | 2 |
a.rfind('e') | 문자열에서 문자 'e'가 처음 나운 위치를 뒤에서부터 찾는다. | 2 |
a.index('e') | 문자열에서 문자 'e'가 처음으로 나온 위치를 반환한다. 없으면 ValueError가 발생한다. |
2 |
's'.join(a) | 문자열 각각의 요소 사이에 문자열 's'를 결합한다. | 'sHseslslso sPsystshsosn' |
a.lower() | 문자열 전체를 소문자로 바꾼다. | ' hello python' |
a.upper() | 문자열 전체를 대문자로 바꾼다. | ' HELLO PYTHON' |
a.lstrip() | 문자열의 왼쪽 공백을 모두 지운다. | 'Hello Python' |
a.rstrip() | 문자열의 오른쪽 공백을 모두 지운다. | ' Hello Python' |
a.strip() | 문자열의 양쪽 공백을 모두 지운다. | 'Hello Python' |
a.replace('e','aa') | 문자열에서 'e'라는 문자를 'aa'라는 문자열로 치환한다. | ' Haallo Python' |
a.split('e') | 'e'를 구분자로 문자열을 분리해 리스트로 반환한다. | [' H', 'llo Python'] |
a.swapcase() | 문자열에서 대문자는 소문자로, 소문자는 대문자로 변경한다. | ' hELLO pYTHON' |
a.startswith('H') | 문자열이 대문자 'H'로 시작하는지 여부를 True 또는 False로 반환한다. 제일 앞 문자가 공백이므로 False이다. |
False |
len(a) | 문자열의 크기(길이)를 반환한다. | 12 |
리스트 자료형
· 리스트는 여러 개의 요소 객체(숫자, 문자 등)를 하나로 묶은 자료형이다.
· 리스트의 특징:
1. 임의의 객체를 저장하는 여러 요소의 집합적인 자료형 중 하나다.
2. 다양한 형태의 값을 저장하기 위한 자료형으로 사용되며, 대괄호([ ])를 사용해 요솟값들을 둘러 준다.
3. 리스트 내의 요소들에 대한 각 항목은 쉽표(,)로 구분한다.
4. 중복 자료의 저장, 중복 리스트의 저장도 가능하다.
5. 순서가 있고(0부터 시작), 요솟값의 변경이 가능하다.
6. 인덱싱, 슬라이싱, 연결, 반복, 요소 검사 등이 가능하다.
7. 복합 데이터 유형에 적당하며, 여러 요소의 묶음 자료형 중에 가장 많이 사용한다.
· 예시 1 - 리스트 생성하기
· 예시 2 - 리스트에 값 추가하기
insert 함수를 사용해 리스트의 원하는 위치에 요소를 추가할 수 있다.
append 함수를 사용해 리스트 마지막 위치에 요소를 추가할 수 있다.
extend 함수를 사용해 리스트 자료형 데이터와 문자열을 추가할 수 있다. 문자열을 넣어 주면 각각의 문자로 나뉘어 기억된다.
- append와 extend의 공통점: 요소값 종류에 상관없이 추가한다.
- append와 extend의 차이점: append 함수는 추가되는 리스트 자체를 요소로 추가하고, extend 함수는 이터러블의 각 항목들을 원소로 넣는다.
- 이터러블(iterable) 객체: 반복 가능한 객체를 의미한다. 이터러블한 자료형으로 리스트, 딕셔너리, 세트, 문자열, 튜플이 있다.
더하기 연산자를 이용해 자료를 추가할 수 있다.
· 예시 3 - 리스트에 값 제거하기
· remove 함수로 리스트에서 원하는 요소를 제거할 수 있다.
리스트 자료형의 슬라이싱
· 리스트 자료형도 순서가 있으므로 문자열 자료형과 마찬가지로 인덱싱과 슬라이싱이 가능하다.
listData = [1, 2, 3, 4, 5]
print(listData[0:2])
listData = [1, 2, 3, ['a', 'b', 'c'], 4, 5] # 중첩 리스트 가능
listData[0] = 100 # 리스트는 요소값 변경 가능
listData[3][0] = ['happy']
print(listData)
print(listData[0], listData[3])
print(listData[3][:2])
print(listData[3][2])
리스트 요소의 정렬
· sort 함수 또는 sorted 함수를 사용하면 리스트 자료를 입력 순서와 다르게 오름차순이나 내림차순으로 정렬할 수 있다.
- 기본은 오름차순이고, reverse 속성값을 주면 내림차순도 가능하다.
- sort 함수와 sorted 함수의 차이: sort()는 정렬 대상 리스트 요소가 정렬되고, sorted()는 정렬된 리스트를 새로 만든다.
listData = [3, 1, 5, 2 ,4]
listData.sort() # 오름차순 정렬
print('sort 결과:',listData)
listData.sort(reverse=True) # 내림차순 정렬
print('listData 결과:', listData)
print()
listData2 = ['123', '34', '234']
print(listData2)
listData2.sort() # 문자열은 사전순으로 정렬
print(listData2)
listData2.sort(key=int) # 문자열이지만 숫자형으로 정렬
print(listData2)
print()
listData3 = sorted(listData)
print(listData)
print(listData3)
listData3 = sorted(listData, reverse=True)
print(listData3)
listData3 = sorted(listData2, key=int)
print(listData3)
리스트의 +, * 연산
· 두 리스트에 + 연산을 하면, 두 리스트를 더할 수 있다.
· 특정 리스트에 * 연산을 하면, 곱한 수 만큼 리스트가 더해진다.
깊은 복사와 얕은 복사
· 얕은 복사: 새로운 객체를 만드는 방식이 아닌 같은 객체를 참조하는 방식의 복사 ex) name2 = name1
· 깊은 복사: 새로운 객체를 만들어 별도의 공간은 확보하는 방식의 복사 ex) name3 = copy.deepcopy(name1)
# 얕은 복사
name1 = ['Ted', 'Robin']
name2 = name1 # 주소 복사: 같은 객체를 참조
print(id(name1), id(name2)) # name1과 name2는 주소가 같다.
# 깊은 복사
import copy #deepcopy()를 지원하는 모듈 로딩
name3 = copy.deepcopy(name1)
print(id(name1), id(name3)) # name1과 name3는 주소가 다르다.
리스트를 통한 스택과 큐의 구현
· 리스트의 append 함수, pop 함수를 통해 스택과 큐를 쉽게 구현할 수 있다.
# 스택 구현
print('리스트로 stack(LIFO) 처리')
stack = [10, 20, 30]
stack.append(40)
print(stack)
stack.pop()
print(stack)
# 큐 구현
print('리스트로 queue(FIFO) 처리')
queue = [10, 20, 30]
queue.append(40)
print(queue)
queue.pop(0);
print(queue)
튜플 자료형
· 튜플의 특징:
1. 소괄호( )를 사용하여 요소들을 둘러싼다.
2. 튜플 내의 요소들은 쉼표(,)로 구분한다.
3. 순서가 있다.
4. 리스트와 달리 읽기 전용이며, 리스트보다 검색 속도가 빠르다.
5. 리스트처럼 인덱싱, 슬라이싱, 연결, 반복, 요소 검사 등이 가능하다.
6. 변경할 자료는 리스트에, 변경하지 말아야 할 자료는 튜플에 저장하면 효과적이다.
· 예시 - 튜플 자료형 사용하기
tupleData = ('a', 'b', 'c', 'a')
print(tupleData)
print('크기:', len(tupleData))
print('a 문자의 개수:', tupleData.count('a'))
print('b 문자 위치:', tupleData.index('b'))
# 튜플 자료형의 데이터를 변경하는 방법
print('\n튜플 자료형의 데이터를 변경')
tupleData = (1, 2, 3)
print('tupleData:', tupleData)
# tupleData[1] = 10 -> 에러, 튜플의 요소는 수정 불가능
listData = list(tupleData) # 튜플을 리스트로 형 변환
listData[1] = 10 # 리스트 요소는 수정 가능
tupleData = tuple(listData) # 리스트를 튜플로 형 변환
print('tupleData:', tupleData)
# 요소값 교환
print('\n요소값 교환')
tupleData = (10, 20)
print('tupleData:' , tupleData)
a, b = tupleData # a, b 두 변수에 tupleDate를 치환
b, a = b, a
tupleData = a, b
print('tupleData:' , tupleData)
세트 자료형
· 세트의 특징:
1. 요솟값을 중괄호{ }로 둘러 준다.
2. 순서가 없고 중복을 허용하지 않는다. 멤버 검사와 중복된 항목을 제거할 때 효과적이다.
3. 두 개의 세트 자료 간에 합이나 차를 위한 함수가 지원된다. ex) union(), intersection(), difference() 등
· 예시 - 세트 자료형 사용하기
setData1 = {1, 2, 3, 4}
print(setData1)
print('setData1 크기:', len(setData1))
setData2 = {3, 4}
print('setData1과 setData2의 합집합:', setData1.union(setData2))
print('setData1과 setData2의 교집합:', setData1.intersection(setData2))
print('setData1과 setData1의 차집합:', setData1.difference(setData2))
print('합집합(setData1 | setData2):%s' %(setData1 | setData2))
print('교집합(setData1 & setData2):%s' %(setData1 & setData2))
print('차집합(setData1 - setData2):%s' %(setData1 - setData2))
# print(setData1[0]) -> 에러: 세트는 인덱싱이 불가능
setData1.add(5) # 요소 추가는 가능
print('요소를 추가한 후 setData1:', setData1)
setData1.update({5,6})
print('update 후 setData1:', setData1)
setData1.discard(5) # 요소 삭제, 없으면 통과
setData1.remove(6) # 요소 삭제, 없으면 에러
print('요소 삭제 후 setData1:', setData1)
· 예시 - 세트를 이용해 중복 제거하기
setData = {1, 1, 2, 3}
print('setData:',setData)
print('tuple(setData):',tuple(setData)) # 튜플로 형 변환
print('list(setData):',list(setData)) # 리스트로 형 변환
listData = {1, 1, 2, 2, 3, 3} # 1, 2가 두 개 들어 있는 리스트
print('리스트 listData:',listData)
setData = set(listData) # 세트로 형 변환하면, 중복된 자료가 없어진다.
listData = list(setData) # 세트를 리스트로 형 변환
print('변환 후 listData:', listData)
- 여러 개의 값을 갖는 묶음 자료형은 tuple, list, set 함수를 이용하여 자료형 간의 변환이 가능하다. 이를 통해 각 자료형들의 장점을 최대한 활용할 수 있다.
딕셔너리 자료형
· 딕셔너리(딕트 자료형)의 특징:
1. 중괄호 내에 {'키1':'값1','키2':'값2' ...}와 같이 쌍으로 자료를 저장한다.
2. 딕셔너리는 순서를 갖지 않는다. 키를 중심으로 자료를 기억한다.
3. 딕셔너리는 키를 이용해 값을 조회한다.
- 문자열, 리스트, 튜플은 숫자 인덱스를 이용해 값을 조회한다.
- 값을 이용해 해당하는 키를 조회할 수는 없다.
4. 키는 문자열, 숫자를 주로 사용하고, 값은 모든 유형의 파이썬 객체일 수 있다.
5. 키는 중복 자료를 가질 수 없고, 값은 중복이 가능하다.
6. 웹 프로그래밍으로 자료를 주고받을 때 많이 사용하는 JSON 타입과 함께 쓰기에 효과적이다.
· 예시 - 딕셔너리 자료형 사용하기
# dict 함수로 딕셔너리 생성
dictData = dict(k1 = 1, k2 = 'abc', k3 = 3.4)
print(dictData)
print()
# ['키1':'값1', ...] 형태로 딕셔너리 생성
coffee = {'mocha':'카페모카', 'latte':'라떼'}
print(coffee)
print('커피 크기:', len(coffee))
print()
# 딕셔너리 요소로 출력
print(coffee.keys())
print(coffee.values())
print(coffee.items())
print()
# 딕셔너리 요소 조회
print('키로 조회한 값:', coffee['mocha'])
print('키로 조회한 값:', coffee.get('mocha'))
print()
# print(coffee['카페모카']) -> 값으로 조회하면 에러
# 딕셔너리 key 유무 판단
print('latte' in coffee)
print()
# 딕셔너리 요소 추가
coffee['lungo'] = '룽고'
print(coffee)
print()
# 딕셔너리 요소 삭제
del coffee['lungo']
print(coffee)
print()
# 딕셔너리 합치기
drink = {'cola':'콜라'}
water = {**coffee, **drink}
print(water)
'파이썬' 카테고리의 다른 글
[Python] 파이썬의 함수 (0) | 2022.03.26 |
---|---|
[Python] 파이썬 제어문: 조건문과 반복문 (0) | 2022.03.21 |
[Python] 파이썬의 코딩 규약 (PEP) (0) | 2022.03.15 |
[Python] 파이썬의 설치 및 실습 환경 설정 (0) | 2022.03.15 |
[Python] 파이썬의 특징 (0) | 2022.03.15 |
댓글