Section 01 시퀀스 자료형의 개요
배열(array)은 순서가 있는 동일한 자료들을 표현하는 자료구조이다. 파이썬에서는 기존 언어들에서 제공하는 배열의 기능을 포함하면서도 더 확장된 기능을 제공하는 시퀀스 자료형(Sequence data type)을 제공하고 있다. 시퀀스 자료형은 서로 다른 형의 데이터들을 하나의 자료구조로 표현할 수 있다.
파이썬에서 제공하는 시퀀스 자료형은 다음 3종류이다.
- 문자열
- 리스트
- 튜플
세 가지는 표현 방법은 다르지만 모두 순서가 정해져 있는 자료형이라는 공통적인 특성을 가지고 있다. 이러한 자료형을 시퀀스(sequence) 자료형이라 한다.
Section 02 시퀀스 자료형의 연산
1. 인덱싱
인덱싱(Indexing)은 순차적인 자료구조에 인덱스(첨자) 값을 가지고 접근할 수 있는 기능이다. 시퀀스 자료의 인덱스는 양수 또는 음수의 사용이 가능하다. 양수 인덱스는 0부터 시작하고, 음수 인덱스는 자료형의 뒤에서부터 시작한다.
변수[i] # i번째 값을 의미
2. 슬라이싱
슬라이싱(Slicing)은 시퀀스 자료형에서 일부분을 잘라내어 동일한 자료형으로 반환하는 기능이다. 인덱스를 사용하여 자료형의 특정 부분을 지정한다.
변수[start:stop:step] # start부터 시작해서 stop 이전까지 step 간격으로 추출
3. 연결
연결(Concatenation)은 '+' 연산자를 사용하여 두 개의 자료를 연결하여 새로운 시퀀스 자료형을 만든다. 서로 다른 자료형은 협쳐질 수 없다.
자료형 + 자료형
4. 반복
반복(Repetition)은 '*' 연산자를 사용하여 시퀀스 자료형을 원하는 만큼 반복시킬 수 있다.
자료형 * 반복횟수
5. 멤버 유무 검사
멤버 유무 검사는 시퀀스 자료형에 특정 자료가 있는지를 알려주는 기능이다. in 연산자를 사용하여 시퀀스 자료형에 특정 자료가 있는지 True 또는 False로 알려준다. 또한 in 연산자는 for 반복문에 효율적으로 사용될 수 있다.
자료 in 자료형
6. 길이 정보
파이썬에서는 내장 함수인 len() 함수를 이용하여 시퀀스 자료형의 길이를 알 수 있다.
len(자료형)
Section 03 문자열
1. 문자열 생성
s1 = 'I like Python' # 작은따옴표로 생성
s2 = "I love Python" # 큰따옴표로 생성
s3 = '''I really love Python''' # 3개의 작은따옴표로 생성
s4 = '''I like Python
I love Python
I really love Python''' # 3개의 작은따옴표를 사용하여 여러 줄의 문자열 생성
s5 = '' # 작은따옴표로 빈 문자열 생성
s6 = str() # str() 함수를 사용하여 빈 문자열 생성
len(s5) # 빈 문자열의 길이, 값은 0
s1 = "I like 'Python' language" # 큰따옴표 내에 작은따옴표를 사용
s2 = 'I like \'Python\' language' # 작은따옴표 내에 \'를 사용
s3 = 'I like "Python" language' # 작은따옴표 내에 큰따옴표를 사용
s4 = '''I 'like "Python" language''' # 3개의 작은따옴표 내에 각 따옴표를 사용
s1 = str(1234) # 정수로 문자열 생성, s1은 'str'형
s2 = str(123.456) # 실수로 문자열 생성
s3 = str([1,2,3]) # 리스트로 문자열 생성. 리스트 자체를 문자열로 인식
s3[0] # 문자열의 첫 번째 문자는 '['
s4 = str({1,2,3}) # 튜플로 문자열 생성. 튜플 자체를 문자열로 인식
s4[2] # 문자열의 세 번째 문자는 ','
2. 문자열 메소드
파이썬의 내장 함수는 파이썬 언어 자체에서 자고오디는 함수를 의미하며, 메소드는 해당되는 객체에서 제공하는 기능을 의미한다. 문자열 메소드는 문자열 객체에만 적용되는 문자열 객체에만 적용되는 메소드이다.
대소문자 변환
s1 = 'i like python language'
s2 = s1.capitalize() # 문자열의 첫 문자만 대문자로 만듦
s3 = s1.title() # 모든 단어의 첫 문자를 대문자로 만듦
s4 = s1.upper() # 모두 대문자로 만듦
s5 = s1.lower() # 모두 소문자로 만듦
문자열 정렬
s1 = 'I like Python'
s2 = s1.center(30) # 30칸 공간에 가운데 정렬
s3 = s1.center(30, '*') # 30칸 공간에 가운데 정렬. 빈 공간에 '*' 출력
s4 = s1.ljust(30) # 30칸 공간에 왼쪽 정렬
s4 = s1.rjust(30, '@') # 30칸 공간에 오른쪽 정렬. 빈 공간에 '@' 출력
s5 = 'I like Python language'
s5.count('a') # 문자열에 'a'가 몇 개 있는가?
s5.count('a', 0, 12) # 문자열 인덱스 0부터 12 사이에 'a'가 몇 개 있는가?
s5.count('a', 12) # 문자열 인덱스 12 이후에 'a'가 몇 개 있는가?
문자열 내의 위치
s1 = 'I love Python language'
s1.index('l') # 문자열 내에서 'l'의 인덱스
s1.find("l") # 문자열 내에서 'l'의 인덱스
s1.rindex('l') # 문자열 내에서 'l'의 오른쪽부터 검색
s1.rfind("l") # 문자열 내에서 'l'의 오른쪽부터 검색
s1.index('python') # 문자열 내에서 'python'의 인덱스. 없을 경우 오류 발생
s1.find('python') # 문자열 내에서 'python'의 인덱스. 없을 경우 -1 반환
s1.startswith('I like') # 문자열이 'I like'로 시작하는가?
s1.endswith('aga') # 문자열이 'aga'로 끝나는가?
문자열 결합, 분리
list1 = ['1', '2', '3', '4', '5']
s1 = '-'.join(list1) # '-' 문자와 리스트를 조인
# 결과: '1-2-3-4-5'
# join 되는 대상은 반드시 문자열이어야 함
s1 = 'I like Python language'
s1.split() # 문자열을 스페이스로 분리하여 리스트로 반환
s2 = 'I-like-Python-language'
s2.split('-') # 문자열을 '-'로 분리하여 리스트로 반환
s2.split('-', 1) # 문자열을 '-'로 한 번만 분리
s2.rsplit('-', 1) # 문자열을 오른쪽부터 '-'로 한 번만 분리
s3 = 'I\nlike\nPython\nlanguage'
s3.splitlines() # '\n'을 기준으로 부닐하여 리스트로 반환
문자열에서 특정 문자 제거, 변환
s1 = ' I like Python language '
s1.strip() # 문자열 양 옆 공란 제거
s1.rstrip() # 문자열 오른쪽 공란만 제거
s1.lstrip() # 문자열 왼쪽 공란만 제거
s2 = 'I like Python language'
s2.strip() # 중간의 공란은 제거하지 않음
s1 = 'I like Python language'
s3.partition('Python') # 'Python'을 기준으로 문자열 3개 요소로 나누어 튜플로 반환
s3.replace('like', 'love') # 특정 문자열을 지정된 문자열로 대체
s3.zfill(30) # 30칸에 문자열을 넣고 남는 공간 '0'으로 채움
문자열 검사
s1 = 'I Like Python Language'
s1.istitle() # 모든 단어의 첫 문자가 대문자인가? 결과; True
s2 = 'abc123'
s2.isalnum() # 모든 문자열이 숫자와 문자로만 구성? 결과; True
s3 = '1234567890'
s3.isdigit() # 모든 문자열이 숫자로만 구성? 결과; True
s4 = 'ILikePythonLanguage'
s4.isalpha() # 모든 문자열이 문자로만 구성? 결과; True
s5 = s1.upper() # 문자열의 모든 문자를 대문자로 변환
s5.isupper() # 모든 문자열의 모든 문자가 대문자? 결과; True
s6 = s1.lower() # 문자열의 모든 문자를 소문자로 변환
s6.islower() # 모든 문자열의 모든 문자가 소문자? 결과; True
Section 04 리스트
시퀀스 자료형인 리스트는 생성된 후에 변경이 가능한 자료형이다. 리스트는 내장 함수 대부분이 적용될 수 있으며, 시퀀스 자료형 연산이 적용될 수 있다.
리스트(list)는 동일한 형의 데이터는 물론 파이썬에서 제공하는 모든 자료형의 데이터를 요소로 가질 수 있다. 또한 리스트의 중간에 새로운 요소를 삽입하거나 삭제할 수 있는 자료구조이다.
1. 리스트 생성
list1 = [1,2,3,4,5]
list2 = [1,'one',(1,2,3),"Seoul"]
lang = 'Python'
list3 = list(lang) # 문자열을 리스트로 생성
# 결과; ['P', 'y', 't', 'h', 'o', 'n']
tup1 = {1,2,3,4,5}
list4 = list(tup1) # 튜플을 리스트로 생성
# 결과; [1, 2, 3, 4, 5]
map1 = {1: 'one', 2: 'two', 3: 'three'}
list5 = list(map1) # 딕셔너리를 리스트로 생성
list 6 = list(range(1,11)) # range() 함수를 사용하여 리스트 생성
# 결과; [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
list1 = [1,2,3,4,5]
list1[2] = (1,2,3) # 리스트의 3번째 요소에 튜플 삽입
# 결과; [1, 2, (1,2,3), 3, 4, 5]
del list1[0] # del 연산자를 사용하여 첫 번째 요소를 삭제
list2 = [1,2,3]
list3 = [3,2,1]
list4 = [1,2,3]
list2 == list3, list2 == list4 # 두 개의 리스트가 같은가?
# 결과; (False, True)
sun(list2) # sum() 함수를 사용한 리스트 요소의 합
# 결과; 6
# 리스트 요소의 데이터 타입이 다르면 오류 발생
max(list2), min(list2) # 최댓값, 최솟값
# 결과; (3, 1)
2. 리스트 메소드
리스트 메소드는 리스트에만 적용되는 메소드이다.
리스트에 요소 삽입, 확장
list1 = [1,2,3,4,5]
list1.append((1,2,3)) # 리스트 마지막에 튜플 삽입
list1.insert(2, 'Korea') # 리스트의 특정 위치에 삽입
# 결과; [1, 2, 'Korea', 3, 4, 5, (1, 2, 3)]
list1.extend('Python') # 리스트를 문자열과 연결하여 확장
list1.extend([1,2,3]) # 리스트를 리스트와 연결하여 확장
# 결과; [1, 2, 3, 'P', 'y', 't', 'h', 'o', 'n', 1, 2, 3]
list1 = [1,2,3]
list1.extend({2,3,4,5}) # 리스트를 집합과 연결하여 확장
list1.extend(range(100,105)) # range() 함수를 사용하여 리스트 확장
# 결과; [1, 2, 3, 2, 3, 4, 5, 100, 101, 102, 103, 104]
리스트에서 요소 삭제 및 개수
cities = ['seoul', 'daejeon', 'daego', 'busan']
last_city = cities.pop() # 마지막 요소 삭제
first_city = cities.pop(0) # 리스트의 첫 번째 요소를 삭제하고 반환
cities.remove('daejeon') # 지정된 요소 삭제
cities.clear() # 리스트의 모든 요소를 삭제하고 빈 리스트로 만들기
num = [1,2,3,2,3,4,2,1,1,3]
num.count(3) # 리스트에 지정된 요소가 몇 개? 결과; 3
리스트의 대입과 복사
num1 = [1,2,3]
num2 = num1 # 리스트 대입
id(num1), id(num2) # 객체의 주소로, 동일한 값을 가짐
num1.insert(1,100) # num1에 요소 삽입
num1, num2 # 두 개의 리스트에 모두 삽입
num3 = [1,2,3]
num4 = num3.copy() # 복사
id(num3), id(num4) # 객체의 주소로, 서로 다른 값을 가짐
num3.insert(1,100) # num3에 요소 삽입
num3, num4 # num3에만 요소 삽입
리스트의 인덱스, 정렬
num1 = [33,22,11,77,88,33,99,66,55,22]
num1.index(22) # 지정된 요소의 위치로, 처음부터 검색
num1.index(22, 2) # 지정된 요소의 위치로, 세 번째부터 검색
num1.index(33, 2, 9) # 인덱스 2~9 사이에서 33을 검색
num1.sort() # 오름차순으로 정렬
langs = ['C', 'Java', 'Python', 'C#']
langs.sort() # 문자의 코드 값으로 정렬
# 결과; ['C', 'C#', 'Java', 'Python']
langs.sort(reverse=True) # 문자의 코드 값을 기준으로 내림차순 정렬
# 결과; ['Python', 'Java', 'C#', 'C']
langs.reverse() # 리스트를 역순으로
# 결과; ['C', 'C#', 'Java', 'Python']
3. 다중 리스트
리스트의 요소로 또 다른 리스트를 가질 수 있으며, 이러한 리스트를 다중 리스트라고 한다. 다중 리스트의 인덱스는 2차원 형태로 사용된다.
다음은 다중 리스트를 구성하고, 리스트 요소의 합을 구하는 예이다.
num = [[11,12,13], [21,22,23], [31,32,33,34], [41,42]]
for j in range(len(num)): # 리스트 길이만큼 반복
sum = 0
for i in range(len(num[j])): # 리스트의 각 요소의 길이만큼 반복
sun = sum + num[j][i] # 각 요쇼의 합
print(j + 1, '번째 줄의 합 :', sum)
# 1 번째 줄의 합 : 36
# 2 번째 줄의 합 : 66
# 3 번째 줄의 합 : 130
# 4 번째 줄의 합 : 83
comp = [1,2,['a','b','c',['A','B']]]
comp[2] # 세 번째 요소
# 결과; ['a', 'b', 'c', ['A', 'B']]
comp[2][3] # 세 번째 요소의 네 번째 요소
# 결과; ['A', 'B']
comp[2][3][1] # 세 번째 요소의 네 번째 요소의 세 번째 요소의 두 번째 요소
# 결과; 'B'
Section 05 튜플
시퀀스 자료형인 튜플(tuple)은 생성된 후에 변경이 불가능하다는 점을 제외하고는 리스트와 유사하다. 사용자는 한 번 생성된 후에 변경의 필요성이 있는 경우에는 리스트를, 변경이 불필요한 경우에는 튜플을 사용하면 된다.
1. 튜플 생성
t1 = (1,2,3,4,5) # 튜플 생성
t2 = 11,22,33,44,55 # 괄호 없이 튜플 생성 가능, 콤마로 구분
t1[2] # 인덱스를 이용한 세 번째 요소의 값
# 값 변경 시도 시 오류 발생
lang = 'Python'
t3 = tuple(lang) # 문자열로 튜플 생성
# 결과; ('P', 'y', 't', 'h', 'o', 'n')
t4 = tuple(range(1,10,2)) # range() 함수 이용
# 결과; (1, 3, 5, 7, 9)
튜플 자료형 자체는 변경할 수 없지만 튜플의 요소가 리스트, 집합, 딕셔너리일 경우 각 요소들은 변경이 가능하다.
t1 = (1,2,[10,20,30])
t1[2][1] = 100 # 값 변경
t1[2].append(40)
# 결과; (1, 2, [10, 100, 30, 40])
2. 튜플 메소드
튜플은 생성된 후에 변경할 수 없는 자료형이므로 제공되는 메소드는 두 개이다.
color = ('white', 'red', 'green', 'blue', 'white', 'yellow', 'red', 'white')
color.count('white') # 'white'의 개수
color.index('green') # 'green'의 인덱스 위치
color.index('white', 2) # 인덱스 2 이후에서 'white'의 인덱스 위치
# 요소에 없는 값의 인덱스를 확인하려고 하면 오류 발생
'파이썬 > 개념' 카테고리의 다른 글
[알기 쉽게 해설한 파이썬 with 컴퓨팅 사고력] CH08 파일 입출력 (1) | 2024.11.18 |
---|---|
[알기 쉽게 해설한 파이썬 with 컴퓨팅 사고력] CH07. 세트와 딕셔너리 (1) | 2024.11.17 |
[알기 쉽게 해설한 파이썬 with 컴퓨팅 사고력] CH05. 반복문 (2) | 2024.10.15 |
[알기 쉽게 해설한 파이썬 with 컴퓨팅 사고력] CH04. 선택문 (0) | 2024.10.15 |
[알기 쉽게 해설한 파이썬 with 컴퓨팅 사고력] CH03. 파이썬 기초 문법 (0) | 2024.10.15 |