군집 자료형 1 - 문자열과 리스트
1. 문자열
문자열 안에 ' 또는 "를 넣고 싶을 때
'안녕' 또는 "안녕" print('안녕') 또는 print("안녕")
'Hello' 또는 "Hello" -> print('Hello') 또는 print("Hello")
'1988' 또는 "1988" print('1988') 또는 print("1988")
“88 서울 올림픽 마스코트는 ‘호돌이' 이다."
'그는 이렇게 말했다. "나는 파이썬을 사랑해!" 라고 '
↓
print("88 서울 올림픽 마스코트는 '호돌이' 이다.")
print('그는 이렇게 말했다. "나는 파이썬을 사랑해!" 라고 ')
SyntaxError 발생
SyntaxError: invalid syntax
문제 해결 방법 : Escape Character 를 사용
이스케이프문자 | 기능 |
---|---|
\" | 화면에 큰 따옴표를 표시 |
\' | 화면에 작은 따옴표를 표시 |
\n | 줄 바꿈 |
\t | 탭(tab)만큼 띄우기 |
\ \ | 화면에 역슬래시(\)를 표시 |
#section_019.py
text1 = '문자열은 작은 따옴표 또는 큰 따옴표로 묶을 수 있다.'
print(type(text1))
text2 = '작은 따옴표로 묶인 문자열 안에 큰 따옴표 (")는 문제 없네요.'
print(text2)
text3 = "큰 따옴표로 묶인 문자열 안에 작은 따옴표 (')는 문제 없네요."
print(text3)
text4 = '특수문자열은 \' 이렇게 \' 출력되요. '
Output
<class 'str'>
작은 따옴표로 묶인 문자열 안에 큰 따옴표 (")는 문제 없네요.
큰 따옴표로 묶인 문자열 안에 작은 따옴표 (')는 문제 없네요.
특수문자열은 '이렇게' 출력되요.
여러 줄 문자열 처리
- 파이썬에서는 여러 줄 문자열을 만들 수 있다.
- 여러줄 문자열을 표현할때는 작은 따옴표 또는 큰 따옴표 3개를 연달아 사용해서 여러 줄 문자열을 묶어 준다.
- 여러줄 문자열을 사용하면 줄바꿈, 탭, 공백등이 그대로 표현된다.
text = '나는 문자열이다. \n 줄바꿈하려면 특수문자열을 써야하고, \\n 특수문자열을 사용하면 \t탭도 가능하다.'
print(text)
print()
multiText = '''
그런대 여러 줄 문자열을 사용하면
여기 보이는 그대로 출력된다.
줄바꿈이라 탭이나 공백도 그대로이다.
큰따옴표 세개 (""")를 사용해도
같은 결과를 얻을 수 있다.
물론 다양한 특수문자 ~!@#$%^&*()도 그대로 출력된다.
'''
print(multiText)
Output
나는 문자열일다.
줄바꿈하려면 특수문자열을 써야하고,
특수문자열을 사용하면 탭도 가능하다.
그런데 여러 줄 문자열을 사용하면
여기 보이는 그대로 출력된다.
줄바꿈이라 탭이나 공백도 그대로이다.
큰따옴표 세개 (""")를 사용해도
같은 결과를 얻을 수 있다.
물론 다양한 특수문자 ~!@#$%^&*()도 그대로 출력된다.
문자열 연산
- 문자열 연산은 문자열에 대해서 적용할 수 있는 연산으로 다음 두 가지가 있다.
- 문자열 * 숫자: 문자열을숫자만큼반복
- 문자열 + 문자열: 두문자열을연결
- 문자열 연산은 문자열 변수에 대해서도 연산 적용이 가능하다.
#section_21.py
print("=" * 40)
print("Python은" + " 훌륭한 프로그래밍 언어이다")
head = "Python은 "
tail = "훌륭한 프로그래밍 언어이다"
string = head + tail
print(string)
str1 = "꿈"
str2 = "과"
str3 = "도"
str4 = "전"
print(str1 + str2 + " " + str3 + str4)
print ("=" * 40)
Output
========================================
Python은 훌륭한 프로그래밍 언어이다
Python은 훌륭한 프로그래밍 언어이다
꿈과 도전
========================================
문자열 인덱싱
- 문자열 인덱스(index)는 문자열에 지정되어 있는 번호를 말하며, 정방향으로는 0부터 시작하고 역방향으로는 -1부터 시작한다.
- 인덱싱은 인덱스(index)를 이용해서 지정된 위치의 값을 가져오는 기능을 말한다.
-------------------------
| N | A | T | U | R | E |
-------------------------
↑ ↑ ↑ ↑ ↑ ↑
정방향 인덱스 번호 → 0 1 2 3 4 5
-6 -5 -4 -4 -2 -1 ← 역방향 인덱스 번호
- 순서를 가지고 있어서 위치 번호(index)를 이용해 인덱싱이 가능한 객체를 시퀀스형 객체라고 한다.
- 시퀀스형 객체로는 문자열과 더불어 앞으로 배울 리스트(list), 튜플(tuple), range 등이 있다.
#section_022.py
string = "NATURE"
print(string[0])
print(string[1])
print(string[5])
print(string[-1])
print(string[-2])
print(string[-6])
Output
N
A
E
E
R
N
2. 문자열
문자열 슬라이싱
슬라이싱(slicing)
- 문자열, 리스트, 튜플 같은 시퀀스 객체가 포함하고 있는 값들 가운데 일부를 추출할 때 사용하는 기능
- 슬라이싱지정방법: 변수[시작 위치 : 끝 위치]
- 슬라이싱의 위치 지정에서는 정방향 인덱스 번호나 역방향 인덱스 번호가 사용될 수 있다.
주의
정방향 인덱스 번호가 사용되든 역방향 인덱스 번호가 사용되든 값이 추출되려면 시작 위치가 끝 위치 보다 앞을 가리켜야 한다
- 추출되는 값은 시작 위치의 값부터 끝 위치 바로 전까지의 값이 된다.
주의
슬라이싱 끝 위치 지정 시, 끝 위치의 값은 포함되지 않는다
- 시작 위치를 생략하면 맨 처음부터 시작하는 것으로 지정된다.
- 끝 위치를 생략하면 맨 마지막 값까지 포함되는 것으로 지정된다.
#section_023.py
string = "NATURE"
print("-" * 5 + "정방향" + "-" * 5)
print(string[0:5])
print(string[2:4])
print(string[2:])
print(string[:3])
print("-" * 5 + "역방향" + "-" * 5)
print(string[-4:-2])
print(string[-6:])
print(string[:-3])
Output
-----정방향-----
NATUR
TU
TURE
NAT
-----역방향-----
TU
NATURE
NAT
문자열은 불변이다.
- 문자열을 구성하는 문자들은 다른 것으로 변경할 수 없다.
- 문자열 관련 메서드를 이용하면 메서드 수행결과로 새로운 문자열이 생성되는 것이지 원본 문자열이 바뀌는 것이 아니다.
- 정의 내려진 문자열의 항목을 강제로 바꾸려고 할 경우 에러가 발생한다
#section_024.py
string = "name"
print(string)
capital = string.upper()
print(capital)
print(string)
#string(0) = "N" # 오류 발생
Output
name
NAME
name
문자열 관련 메서드
- 문자열 관련 메서드
메서드 | 설명 |
---|---|
upper() | 문자열 내의 소문자를 모두 대문자로 변환 |
lower() | 문자열 내의 대문자를 모두 소문자로 변환 |
count() | 문자열 내 count()메서드의 괄호 안에 지정한 문자가 몇 개 있는 지 count |
startswith() | 문자열이 startswith()메서드의 괄호 안에 지정한 문자로 시작하면 True 값 반환 (주의! 대소문자 구분함) |
endswith() | 문자열이 endswith()메서드의 괄호 안에 지정한 문자로 끝나면 True 값 반환 (주의! 대소문자 구분함) |
split() | split() 메서드의 괄호 안에 지정한 문자를 기준으로 문자열을 분리해서 리스트로 만듦 (괄호 안을 비워서 사용하면 공백문자를 기본값으로 지정) |
zfill() | zfill() 메서드의 괄호 안에 지정한 숫자만큼 문자열 길이를 늘림 (늘린 결과는 기존 문자열이 우측 정렬되고 추가 생성된 왼쪽 공간에 숫자 0이 채워 진다) |
#section_025.py
myStr = "Hello my little baby"
print(myStr.upper())
print(myStr.lower())
print(myStr.title())
print()
print(myStr.count('b'))
print(myStr.endswith('y'))
print(myStr.startswith('h'))
print(myStr.lower().startswith('h'))
print()
mystrlist1 = myStr.split()
print(mystrlist1)
mystrlist2 = myStr.split(',')
print(mystrlist2)
myStrFill = myStr.zfill(30)
print(myStrFill)
Output
HELLO MY LITTLE BABY
hello my little baby
Hello My Little Baby
2
True
False
True
['Hello', 'my', 'little', 'baby']
['Hello my little baby']
0000000000Hello my little baby
3. 리스트(list)
리스트(list) 사용하기
리스트(list) 란?
- 값의 나열이며, 순서가 존재한다.
- 하나의 리스트 안에 여러 종류(자료형)의 값을 담을 수 있다.
- 0부터 시작하는 정방향 인덱스, -1부터 시작하는 역방향 인덱스가 있으며, 슬라이싱도 가능하다.
- 리스트는 대괄호([ ])를 사용하여 정의 내린다.
- 리스트를 할당받는 변수를 리스트 변수라고 한다.
#section_026.py
count = [1, 2, 3, 4, 5]
cars = ['버스', '트럭', '승용차', '밴']
wondolar = [1000, '1달러', 2000, '2달러', 3000, '3달러']
print(count)
print(cars)
print(wondolar)
print(count[0])
print(cars[2])
print(wondolar[-1])
Output
[1, 2, 3, 4, 5]
['버스', '트럭', '승용차', '밴']
[1000, '1달러', 2000, '2달러', 3000, '3달러']
1
승용차
3달러
리스트 변경하기
- 리스트의 각 항목은 필요에 따라 바꿀 수 있다.
- 리스트의 항목을 바꾸고 싶을 때는 인덱스를 이용하여 접근하면 된다.
- 리스트와 리스트를 연결할 때는 + 연산자를 사용하며, 이때 새로운 리스트가 생성된다.
#section_027.py
cheeses = ['체다', '모짜렐라', '까망베르', '리코타']
print(cheeses)
cheeses[0] = '크림'
print(cheeses)
all = cheeses + ['블루']
print(all)
print(cheeses)
Output
['체다', '모짜렐라', '까망베르', '리코타']
['크림', '모짜렐라', '까망베르', '리코타']
['크림', '모짜렐라', '까망베르', '리코타', '블루']
['크림', '모짜렐라', '까망베르', '리코타']
리스트 슬라이싱
- 리스트도 문자열과 같이 슬라이싱으로 일부분만 추출할 수 있다.
- 리스트 슬라이싱 방법은 문자열의 슬라이싱과 같다.
- 슬라이싱하면 새로운 리스트가 생성되며, 이것을 계속 사용하려면 별도의 변수에 저장해야 한다.
#section_028.py
bucket = ['세계일주', '악기 하나 배우기', '누군가의 후원자 되기', '베스트셀러 작가']
print(bucket)
done = bucket[1:3]
print(done)
print(bucket[0:4])
Output
['세계일주', '악기 하나 배우기', '누군가의 후원자 되기', '베스트셀러 작가']
['악기 하나 배우기', '누군가의 후원자 되기']
['세계일주', '악기 하나 배우기', '누군가의 후원자 되기', '베스트셀러 작가']
리스트 관련 메서드 1
- 리스트는 다양한 메서드를 가지고 있다.
- 리스트에서 특정 항목의 위치를 가져오기 위해서는
index()
메서드를 사용한다. - 리스트에 항목을 추가하기 위한 메서드로는
append()
,insert()
,extend()
가 있으며, 각 메서드의 차이를 알아 둘 필요가 있다.
메서드 | 설명 | 리턴값 |
---|---|---|
list변수.index(obj) | 리스트에서 obj 객체가 위치한 가장 첫 번째 인덱스를 반환한다. | 인덱스 리턴, 리턴값이 없으면 오류 발생 |
list변수.append(obj) | 리스트에 obj 객체 한 개를 추가한다. | 리턴값이 없고 리스트만 갱신 |
list변수.insert(index, obj) | 리스트의 index 위치에 obj객체를 삽입한다. | 리턴값이 없고 리스트만 갱신 |
list변수.extend(list_obj) | 리스트에 리스트를 추가한다. | 리턴값이 없고 리스트만 갱신 |
#section_029.py
colors = ['red', 'orange', 'yellow']
print(colors)
print('red의 위치:', colors.index('red')) # 위치 가져오기
print('orange의 위치:', colors.index('orange'))
print()
colors.append('purple') # 항목추가하기
print(colors)
colors.insert(3, 'green') # 항목추가하기
print(colors)
colors.extend(['black', 'white']) # 항목추가하기
print(colors)
Output
['red', 'orange', 'yellow']
red의 위치: 0
orange의 위치: 1
['red', 'orange', 'yellow', 'purple']
['red', 'orange', 'yellow', 'green', 'purple']
['red', 'orange', 'yellow', 'green', 'purple', 'black', 'white']
리스트 관련 메서드 2
- 리스트의 항목들을 정렬하기 위한 메서드로는
sort()
와reverse()
가 있다. pop()
메서드는 리스트의 맨 마지막에 있는 항목을 가져오게 되며, 이때 추출된 항목을 리스트에서 삭제된다. 반면,remove()
메서드는 지정한 obj 항목을 리스트에서 삭제하지만 가져오지는 않는다.count()
메서드는 항목의 개수를 셀 때 사용한다.
메서드 | 설명 | 리턴값 |
---|---|---|
list변수.sort() | 리스트를 구성하는 항목들을 정렬한다. | 리턴값은 없고 리스트 내부를 정렬 |
list변수.reverse() | 리스트를 구성하는 항목들을 역순으로 정렬한다. | 리턴값은 없고 리스트 내부를 역순으로 정렬 |
list변수.pop() | 리스트의 맨 마지막 항목을 리턴하고 리스트에서 삭제한다. | 삭제된 항목을 리턴 |
list변수.remove(obj) | 리스트에서 obj 객체를 삭제한다. | 리턴값이 없고 리스트만 갱신 |
list변수.count(obj) | 리스트에서 obj 객체가 몇 개 있는지 알려준다. | obj 객체의 수를 리턴 |
#section_030.py
colors = ['red', 'orange', 'yellow', 'green', 'yellow']
print(colors)
colors.sort() #항목 정렬하기
print(colors)
colors.reverse() #역순 정렬하기
print(colors)
colors.pop() #항목 가져오기
print(colors)
colors.remove('red') #항목삭제하기
print(colors)
print(colors.count('yellow')) #항목 개수 세기
Output
['red', 'orange', 'yellow', 'green', 'yellow']
['green', 'orange', 'red', 'yellow', 'yellow']
['yellow', 'yellow', 'red', 'orange', 'green']
['yellow', 'yellow', 'red', 'orange']
['yellow', 'yellow', 'orange']
2
리스트 관련 내장 함수
- 리스트를 내장 함수와 함께 사용하면 코딩이 편리해 진다.
sorted()
함수는 원본 리스트를 변경하지 않고 정렬된 새로운 리스트를 만들어 반환한다.list()
함수는 다른 종류의 시퀀스형 객체를 리스트로 만들어 준다.
함수 | 설명 | 리턴값 |
---|---|---|
len() | 리스트에 들어있는 항목의 개수를 리턴한다. | 항목의 개수 |
max() | 리스트에 들어있는 항목 최대값을 리턴한다. | 항목중 최대값 |
min() | 리스트에 들어있는 항목 최소값을 리턴한다. | 항목중 최소값 |
sum() | 리스트에 들어있는 항목들의 합을 리턴한다. | 항목들의 합 |
sorted() | 리스트에 들어있는 항목들을 오름차순으로 정렬한다. | 정렬된 새로운 리스트 |
list(seq) | 괄호 안의 시퀀스형 객체 seq를 리스트로 만들어 준다. | 리스트 |
#section_031.py
floating = [12.831, 4.89, 4037.0, 11.19]
print(len(floating))
print(max(floating))
print(min(floating))
print(sum(floating))
print()
print(sorted(floating))
print(floating)
string = "python"
print(list(string))
Output
4
4037.0
4.89
4065.911
[4.89, 11.19, 12.831, 4037.0]
[12.831, 4.89, 4037.0, 11.19]
['p', 'y', 't', 'h', 'o', 'n']