[파이썬 기초 문법] 5장. 리스트와 문자열
20 Jun 2019
Reading time ~5 minutes
이 포스트는 윤성우님의 저서 열혈 파이썬 기초편을 기반으로 작성한 글입니다.
윤성우 열혈 파이썬 기초편
5장.리스트와 문자
1.print 함수의 복습과 확장
>>> for i in [1, 2, 3]:
print(i, end = '_')
1_2_3_
>>> for i in [1, 2, 3]:
print(i, end = ' ')
1 2 3
2.리스트형 데이터
>>> 35
35
>>> Happy
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
Happy
NameError: name 'Happy' is not defined
>>> 3.14
3.14
>>> [1, 2, 3]
[1, 2, 3]
Happy와 같이 자료형(ex.int,float,…)이 아닌 값을 입력하면 무엇인지 모른다는 에러 메시지가 출력됨.
리스트 또한 파이썬이 인식할 수 있는 자료형이다.(for문의 부속으로 사용되는 용도로 존재하는 문법에 한정된 것이 아니다.)
>>> type([1, 2, 3])
'''
<class 'list'>
'''
type 함수 실행 결과 리스트 또한 자료형에 해당함을 알 수 있다.
>>> [1, "hello", 3.3]
[1, 'hello', 3.3]
한 리스트에 여러 자료형(int,str,float,…)이 들어 갈 수 있다.
>>> [1, 2, [3, 4], ["AAA", "ZZZ"]]
[1, 2, [3, 4], ['AAA', 'ZZZ']]
리스트 안에 리스트가 들어갈 수 있다.
>>> st = [1, "hello", 3.3]
>>> print(st)
[1, 'hello', 3.3]
리스트를 함수의 인자로 전달할 수 있다.
int형 데이터 ex) 3, 5, 7, 9
float형 데이터 ex) 2.2, 4.4, 6.6, 8.8
list형 데이터 ex) [3, 5, 7, 9], [2.2, 4.4, 6.6, 8.8]
따라서 자료형을 위와 같이 분류할 수 있다.
3.인덱싱 연산
>>> [1, 2, 3] + [4, 5]
[1, 2, 3, 4, 5]
>>> [1, 2, 3] * 2
[1, 2, 3, 1, 2, 3]
리스트의 덧셈 및 곱셈 연산결과는 위와 같다.
>>> st = [1, 2, 3, 4, 5]
>>> n1 = st[0]
>>> n2 = st[4]
>>> print(n1, n2)
1 5
>>> st = [1, 2, 3, 4, 5]
>>> print(st[-1], st[-2], st[-3])
5 4 3
리스트의 한 인덱스의 인덱싱 연산결과는 위와 같다.
인덱스가 음수인 경우 오른쪽 끝을 -1로 하여 -1씩 감소한다.
>>> st = [1, 2, 3, 4, 5]
>>> st[0] = 5
>>> st[4] = 1
>>> st
[5, 2, 3, 4, 1]
리스트의 인덱싱 대입 연산결과는 위와 같다.
4.슬라이싱 연산
>>> st1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> st2 = st1[2:5] # st1[2:5]를 꺼내 st2에 저장
>>> st2
[3, 4, 5]
왼쪽 인덱스(2)부터 오른쪽 인덱스 이전(5-1)까지에 해당하는 값들이 출력된다.
5.슬라이싱 연산에서 생략 가능한 부분
>>> st = [1, 2, 3, 4, 5]
>>> st[0:3] = [0, 0, 0]
>>> st
[0, 0, 0, 4, 5]
>>> st = [1, 2, 3, 4, 5]
>>> st[:3] = [0, 0, 0]
>>> st
[0, 0, 0, 4, 5]
왼쪽 인덱스가 0이라면 생략할 수 있다.
>>> st = [1, 2, 3, 4, 5]
>>> st[2:] = [0, 0, 0]
>>> st
[1, 2, 0, 0, 0]
오른쪽 인덱스를 생략하면 갯수에 맞추어 자동으로 연산된다.
>>> st = [1, 2, 3, 4, 5]
>>> st[:] = [0, 0, 0, 0, 0]
>>> st
[0, 0, 0, 0, 0]
>>> st = [1, 2, 3, 4, 5]
>>> st[:] = [0] # 리스트 전체를 0 하나로 교체
>>> st
[0]
>>> st = [1, 2, 3, 4, 5]
>>> st[:] = [] # 리스트 전체 내용 삭제
>>> st
[]
양쪽 모두 생략하면 인덱스 전체를 기준으로 연산된다.
6.리스트에서 몇 칸씩 뛰면서 저장된 값들 꺼내기
>>> st1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
>>> st2 = st1[0:9:2] # st1[0] ~ st2[8]까지 2칸씩 뛰면서
>>> st2
[1, 3, 5, 7, 9]
>>> st1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
>>> st2 = st1[0:9:3] # st1[0] ~ st2[8]까지 3칸씩 뛰면서
>>> st2
[1, 4, 7]
7.스트링형 데이터: 문자열
>>> "Happy birthday to you"
'Happy birthday to you'
>>> 'Happy birthday to you'
'Happy birthday to you'
>>> type('what1') # 작은따옴표로 묶은 문자열
<class 'str'>
>>> type("what2") # 큰따옴표로 묶은 문자열
<class 'str'>
큰 따옴표로 묶어도 작은 따옴표가 기준이 되어 모두 동일하게 문자열로 저장된다.
따라서 자료형을 아래와 같이 분류할 수 있다.
int형 데이터 ex) 3, 5, 7, 9
float형 데이터 ex) 2.2, 4.4, 6.6, 8.8
리스트형 데이터 ex) [3, 5, 7, 9], [2.2, 4.4, 6.6, 8.8]
스트링형 데이터 ex) "I am a boy", 'You are a girl'
>>> [1, 2] + [3, 4]
[1, 2, 3, 4]
>>> "Hello" + "Everybody"
'HelloEverybody'
>>> [1, 2] * 3
[1, 2, 1, 2, 1, 2]
>>> "AZ" * 3
'AZAZAZ
문자열의 덧셈 및 곱셈 연산결과는 다음과 같다
>>> st = [1, 2, 3, 4, 5]
>>> st[2] # 세 번째 위치의 값만 뽑아 냄
3
>>> str = "SIMPLE"
>>> str[2] # 세 번째 위치의 값만(문자만) 뽑아 냄
'M'
>>> st = [1, 2, 3, 4, 5, 6, 7]
>>> st[2:5]
[3, 4, 5]
>>> str = "SIMPLEST"
>>> str[2:5]
'MPL'
>>> str = "Happy"
>>> str[0] = "D"
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
str[0] = 'D'
TypeError: 'str' object does not support item assignment
슬라이싱 연산은 리스트와 동일하나 문자열은 리스트와 달리 변경이 불가한 자료형이다!
8.리스트와 for 루프 그리고 문자열과 for 루프
>>> for i in [1, 2, 3]:
print(i, end = ' ')
1 2 3
>>> for i in 'Happy':
print(i, end = ' ')
H a p p y
for문 역시 리스트와 동일하게 사용할 수 있다.
9.리스트와 문자열을 전달받는 함수 len
>>> st = [1, 2, 3]
>>> len(st)
3
>>> sr = 'HaHaHa~'
>>> len(sr)
7