list
)성질과 쓰임이 비슷한 항목들을 저장할 때 사용하는 자료형으로 python에서 사용 가능한 모든 자료형을 담을 수 있는 자료형입니다. lists는 []
로 묶어서 선언하고 각 요소를 ,
로 구분합니다. [[요소1], [요소2], [요소3]···]
또는 list([[요소1], [요소2], [요소3]···])
형식으로 선합니다.
>>> list1 = [] # 빈 리스트 선언
>>> list2 = [1, 2, 3, 4]
>>> list3 = ['apple', 'store', 'happy']
>>> list4 = list() # 빈 리스트 선언
>>> list5 = ['hello', 123, True]
>>> print(list1)
>>> print(list2)
>>> print(list3)
>>> print(list4)
>>> print(list5)
[]
[1, 2, 3, 4]
['apple', 'store', 'happy']
[]
['hello', 123, True]
가르킨다는 의미로 list 안에 담겨있는 하나의 원소를 참조 or 수정하는 연산입니다. []
안에 있는 값을 인덱스 값 or 인덱스 번호라고 하며, 인덱스 값은 앞에서부터 매기면 0번(1번째 요소)부터 n번 (n+1번째 요소) 까지 입니다. 반대로 뒤에서부터 인덱스 번호를 매기면 -1부터 -n입니다.
>>> list = ['A', 'B', 'C', 'D', 'E']
>>> print(list[0])
>>> print(list[2])
>>> print(list[-1])
>>> print(list[-5])
A
C
E
A
요소를 수정하려면 리스트명[인덱스 값] = 수정값
형식으로 작성합니다.
>>> list = ['A', 'B', 'C', 'D', 'E']
>>> list[0] = 1
>>> list[3] = 'Python'
>>> print(list)
>>> list[0] = ''
>>> print(list)
>>> list[0] = ['Hello', 'python']
>>> print(list)
[1, 'B', 'C', 'Python', 'E']
['', 'B', 'C', 'Python', 'E']
[['Hello', 'python'], 'B', 'C', 'Python', 'E']
잘라낸다는 의미로 list에 속한 여러 요소를 한 번에 수정하거나 특정 구간의 요소들만 출력할 때 사용하는 연산입니다. 리스트명[시작 인덱스 번호 : 마지막 인덱스 번호 + 1]
형식입니다. 예를 들어 listA[3:7]
이라고 작성하면 listA의 인덱스 번호 3부터 6까지 출력됩니다.
>>> list = ['A', 'B', 'C', 'D', 'E', 1, 2, 3, 4, 5,6]
>>> print(list[3 : 5])
>>> print(list[4:8])
['D', 'E']
['E', 1, 2, 3]
특정 경우에서는 인덱스 번호를 생략할 수 있습니다. 앞 인덱스 번호를 생략하면 맨 처음부터, 뒤 인덱스 번호를 생략하면 맨 뒤까지 범위를 지정합니다.
>>> list = ['A', 'B', 'C', 'D', 'E', 1, 2, 3, 4, 5,6]
>>> print(list[3 : ])
>>> print(list[8:])
>>> print(list[:-5])
['D', 'E', 1, 2, 3, 4, 5, 6]
[4, 5, 6]
['A', 'B', 'C', 'D', 'E', 1]
list 덧셈 : list 여러 개를 더하면 문자열 덧셈과 같이 단순히 합하여 하나로 이어집니다.
list 곱셈 : list를 반복하여 새로운 list를 생성합니다.
>>> list1 = [1, 2, 3, 5, 9]
>>> list2 = [4, 6, 7]
>>> list3 = [8, 10]
>>> print(list1 + list2 + list3) # list 덧셈
>>> print(list3 * 3) # list 곱셈
[1, 2, 3, 5, 9, 4, 6, 7, 8, 10] # list 덧셈 결과
[8, 10, 8, 10, 8, 10] # list 곱셈 결과
list 삭제 : del
키워드를 통해 list를 삭제할 수 있습니다.
>>> list = ['A', 'B', 'C', 'D']
>>> del list[0]
>>> print(list)
>>> del list[1:]
>>> print(list)
['B', 'C', 'D']
['B']
append(x)
: list 맨 마직막에 전달인자 x를 추가하는 함수입니다. (단, 한 번에 하나씩만 추가 가능)
insert(x, y)
: list의 x번째(인덱스 번호) 위치에 전달인자 y를 추가하는 함수입니다. (단, 한 번에 하나씩만 추가 가능)
extend(x)
: list에 전달인자 x를 합치는 함수입니다. (단, x는 list)
>>> list = [1, 2, 3, 4, 5, 6, 'A', 'B', 'D', 'K']
>>> list.insert(100, ['K', 'K', 'K'])
>>> print(list)
>>> list.extend([1, 2, 3, 'G', 'G'])
>>> print(list)
>>> list.append([1, 2, 3, 'G', 'G'])
>>> print(list)
[1, 2, 3, 4, 5, 6, 'A', 'B', 'D', 'K', ['K', 'K', 'K']]
[1, 2, 3, 4, 5, 6, 'A', 'B', 'D', 'K', ['K', 'K', 'K'], 1, 2, 3, 'G', 'G']
[1, 2, 3, 4, 5, 6, 'A', 'B', 'D', 'K', ['K', 'K', 'K'], 1, 2, 3, 'G', 'G', [1, 2, 3, 'G', 'G']]
remove(x)
: 요소들 중 첫 번째 x값을 삭제하는 함수입니다. (list의 요소 중 x가 없으면 오류 발생)
pop()
: 요소들 중 마지막 요소를 반환 뒤 그 요소를 삭제하는 함수입니다.
>>> list = [1, 2, 3, 3, 3, 6, 'A']
>>> list.remove(3)
>>> print(list)
>>> print(list.pop())
>>> print(list)
[1, 2, 3, 3, 6, 'A']
A
[1, 2, 3, 3, 6]
sort()
: 요소들을 순서대로 정렬하는 함수입니다. (단, 요소들이 같은 자료형일 때만 사용 가능, 숫자 or 문자)
reverse()
: 요소들의 순서를 역순으로 뒤집는 함수입니다.
>>> list = [1, 3.5, 3, 100, 90, 50, 0.1]
>>> list.sort()
>>> print(list)
>>> list.reverse()
>>> print(list)
[0.1, 1, 3, 3.5, 50, 90, 100]
[100, 90, 50, 3.5, 3, 1, 0.1]
index(x)
: 요소들 중 전달인자 x의 인덱스 번호를 반환합니다. (단, list의 요소들 중 x가 없으면 오류 발생)
count(x)
: 요소들 중 전달인자 x의 개수를 반환합니다.
len(x)
: x에 들어있 요소들의 개수(길이)를 반환합니다.
>>> list = [1, 3.5, 3, 10, 1, 2, 9, 'a', 'b', 'c', 'a', 'a']
>>> print(list.index('a'))
>>> print(list.count(3))
>>> print(len(list))
7
1
12
따옴표(''), 큰따옴표(""), 혹은 삼중 따옴표(''' ''', """ """)로 감싸져서 표현된 문자, 단어들의 묶음을 지칭하는 자료형입니다. 따옴표 안에 숫자가 들어가도 자료형은 바뀌지 않습니다.
>>> numA = 'hello Python'
>>> numB = '123'
>>> print(numA, type(numA))
>>> print(numB, type(numB))
hello Python <class 'str'>
123 <class 'str'>
따옴표로 감싸진 문자열은 어떤 문자든 그대로 출력합니다. 하지만 이에 해당하지 않는 아래 세 가지 경우가 있습니다.
>>> numA = 'hello 'Python' '
>>> print(numA, type(numA))
SyntaxError: invalid syntax
위 코드와 같이 따옴표 안에 같은 따옴표를 사용하면 문자열로 인식하지 못하고 SyntaxError가 발생합니다. 이를 해결할 방법으로는 다른 따옴표로 감싸는 방법이 있습니다. 예를 들어 “
를 출력하고 싶다고 가정한다면, ‘ ’
, “”” “””
, ‘’’ ‘’’
로 감싸서 “
를 출력할 수 있습니다.
>>> numA = 'hello "Python" '
>>> numB = """hello "python" """
>>> numC = '''hello "python" '''
>>> print(numA)
>>> print(numB)
>>> print(numC)
hello "Python"
hello "python"
hello "python"
이 때, “”” “””
, ‘’’ ‘’’
로 문자열을 감싸는 경우에는 escape sequence를 사용하지 않고도 줄바꿈(new line)를 넣을 수 있습니다.
>>> numA = '''hello
>>> my
>>> name is
>>> Python'''
>>> numB = """Welcome
>>> Python
>>> World"""
>>> print(numA)
>>> print()
>>> print(numB)
hello
my
name is
Python
Welcome
Python
World
제어 시퀀스(control sequence), 이스케이프 문자, 확장 비트열 이라고도 합니다. 문자열에 직접 입력할 수 없는 특수 제어문자를 말합니다.
escape sequence | 의미 |
---|---|
\n | 줄바꿈(new line) |
\t | 수평 탭(horizontal tab) |
\a | 경고(alert) |
\v | 수직 탭(vertical tab) |
\b | 백스페이스(backspace) |
\f | 폼 피드(form feed) |
\r | 캐리지 리턴(carriage return) |
\ | 백슬래시( \, backslash) |
\’ | 작음따옴표( ‘, single quotes) |
\” | 큰따옴표( “, double quotes) |
\ooo | 8진수로 ASCII 코드의 문자 표현 |
\xhh | 16진수로 ASCII 코드의 문자 표현 |
>>> print('\thello\n world')
hello
world
문자열의 특정 위치에 %
기호를 사용하여 원하는 값 or 변수를 삽입하는 것을 의미하며, 3가지 방법이 있습니다.
삽입할 값 or 변수의 data tyoe을 지정하여 대입하는 방식입니다. ‘[서식지정자]’ % 변수
, ‘[서식지정자A 서식지정자B]’ % (변수A, 변수B)
형식으로 작성합니다.
서식 지정자 | 설명 |
---|---|
%s | 문자열(string) |
%c | 문자 1개(character) |
%r | 문자열(따옴표 및 escape sequence를 문자 취급) |
%d or %i | 정수(integer) |
%0 | 8진수(octadecimal) |
%x | 16진수(hexadecimal) |
%f | 실수 / 부동 소수(floating point) |
%% | % |
>>> print('반갑습니다 %s' % 'dong님')
반갑습니다 dong님
>>> y = 2024
>>> m = 11
>>> d = 16
>>> day = '목'
>>> print('%d학년도 대학수학능력시험은 %d년%d월%d일 %c요일 입니다.'% (y, y, m, d, day))
2024학년도 대학수학능력시험은 2024년11월16일 목요일 입니다.
%
뒤에 숫자를 붙이면 그 숫자만큼의 공간이 추가되고 오른쪽에 붙어서 출력됩니다. 왼쪽에 붙이고 싶다면 -
를 붙이면 됩니다.
>>> print('안녕하세요%6s님' % 'dong') # 6칸의 공간 = 빈 공간 2킨 + 'dong' 문자열 4칸
>>> print('hello%10s' % 'world') # 10칸의 공간 = 빈 공간 5칸 + 'world' 문자열 5칸
안녕하세요 dong님
hello world
>>> print('%10s is my high school' % 'sunrin')
>>> print('%-10s is my high school' % 'sunrin')
sunrin is my high school
sunrin is my high school
%f
를 사용할 때, 소수점 몇 번째 자리까지 표현할 건지 지정할 수 있습니다.
>>> print('4 / 3 = %.3f' % (4/3)) # 소수점 아래 3자리 까지
>>> print('4 / 3 = %.6f' % (4/3)) # 소수점 아래 6자리 까지
4 / 3 = 1.333
4 / 3 = 1.333333
format()
함수 frmat()
함수 내에 format(요소1, 요소2, 요소3,…, 요소n)
형식으로 값 or 변수를 넣고 %d
와 같은 포맷 대신 {인데스 번호}
형식으로 작성하는 방식입니다.
>>> day = '목'
>>> y = 2024
>>> m = 11
>>> d = 16
>>> print('{1}학년도 대학수학능력시험은 {1}년{2}월{3}일 {0}요일 입니다.'.format(day, y, m, d))
2024학년도 대학수학능력시험은 2024년11월16일 목요일 입니다.
또 다른 방식으로, format()
함수 내에서 변수를 선언하고 초기화하면 {변수명}
형식으로도 작성할 수 있습니다.
>>> print('{school}고등학교는 {y}년에 개교하여 현제 {n}개의 과가 존재하는 학교입니다.'.format(school = '선린인터넷', y = 1899, n = 4))
>>> print('{0}고등학교는 {1}년에 개교하여 현제 {n}개의 과가 존재하는 학교입니다.'.format('선린인터넷', 1899, n = 4))
선린인터넷고등학교는 1899년에 개교하여 현제 4개의 과가 존재하는 학교입니다.
선린인터넷고등학교는 1899년에 개교하여 현제 4개의 과가 존재하는 학교입니다.
단, 변수를 선언하고 초기화하는 구문은 맨 마지막에 위치해야 하며, {인덱스 번호}
형식이 아닌 {변수명}
형식으로만 포맷할 수 있습니다.
>>> print('{school}고등학교는 {1}년에 개교하여 현제 {2}개의 과가 존재하는 학교입니다.'.format(school = '선린인터넷', 1899, 4))
SyntaxError: positional argument follows keyword argument
>>> print('{school}고등학교는 {1}년에 개교하여 현제 {n}개의 과가 존재하는 학교입니다.'.format(school = '선린인터넷', y = 1899, n = 4))
IndexError: Replacement index 1 out of range for positional args tuple
f
문자열 (f-string)문자열 앞에 f
를 붙이고 format()
함수와 비슷하게 {출력값}
형식으로 작성하는 방식입니다.
>>> A = '인강 듣고'
>>> B = '자고'
>>> print(f'나는 학교를 안 가고 집에서 {A} {B}싶다.')
나는 학교를 안 가고 집에서 인강 듣고 자고싶다.
덧셈 : 띄어쓰끼 없이 단순히 하나로 이어집니다.
>>> numA = 'Hello '
>>> numB = 'World'
>>> num = numA + numB
>>> print(num)
Hello World
곱셈 : ‘문자열 * 정수’의 형태로 문자열을 띄어쓰기 없이 반복합니다.
>>> numA = 'Hello '
>>> numB = 5
>>> num = numA * numB
>>> print(num)
Hello Hello Hello Hello Hello
문자열을 하나로 보일지 몰라도, ‘한 문자’ or ‘한 알파벳’ 별로 인덱스 번호를 매겨 인덱싱, 슬라이싱이 가능합니다.
>>> num = 'hello world'
>>> print(num[0]) # 인덱싱
>>> print(num[3]) # 인덱싱
>>> print(num[0:-3]) # 슬라이싱
>>> print(num[2:5]) # 슬라이싱
h # 인덱싱 결과
l # 인덱싱 결과
hello wo # 슬라이싱 결과
llo # 슬라이싱 결과
단, 문자열은 수정 불가능한 객체(immutable)로 한 번 초기화한 후에는 각 요소를 수정할 수 없습니다.
>>> num = 'hello'
>>> num[0] = 'h'
>>> print(num)
TypeError: 'str' object does not support item assignment
x.count(y)
: 문자열 x에서 전달인자 y의 개수를 반환합니다.
x.find(y)
: 문자열 x에서 전달인자 y의 인덱스 번호를 반환합니다. (문자열 안에 y가 없다면 -1을 반환합니다.)
x.index(y)
: find()
와 같은 역을 한다. (단, 문자열 안에 y가 없다면 오류가 발생합니다.)
y.join(x)
: 문자열 x의 요소 사이사이에 y를 삽입합니다.
x.upper()
: 문자열 x를 대문자로 변환합니다.
x.lower()
: 문자열 x를 소문자로 변환합니다.
x.lstrip()
: 문자열 x의 가장 왼쪽의 공백을 모두 삭제합니다.
x.rstrip()
: 문자열 x의 가장 오른쪽의 공백을 모두 삭제합니다.
x.replace(a, b)
: 문자열 x에서 전달인자 a를 찾아 b로 교체합니다.
>>> str = "Hello World! I study Python."
>>> num = str.count(' ') #빈칸의 개수
>>> print("빈칸의 개수는 %d입니다." %num)
>>> print("처음 등장하는 'l'의 인덱스 값은 %d입니다." %str.find('l'))
>>> print("Good day에서 처음 등장하는 'y'의 인덱스 값은 %d입니다." %"Good day".index('y'))
>>>
>>> print(" ".join(str))
>>> print(str.upper())
>>> print(str.lower())
>>> print(str.lstrip())
>>> print(str.rstrip())
>>> print(str.replace('Python', 'C'))
>>> print(str.split())
빈칸의 개수는 4입니다.
HELLO WORLD! I STUDY PYTHON.
hello world! i study python.
Hello World! I study Python.
Hello World! I study Python.
Hello World! I study C.
['Hello', 'World!', 'I', 'study', 'Python.']