📌 리스트(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]

인덱싱(indexing)

가르킨다는 의미로 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']

슬라이싱(slicing)

잘라낸다는 의미로 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를 반복하여 새로운 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']

list 관련 함수

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





📌 문자열(string)

따옴표(''), 큰따옴표(""), 혹은 삼중 따옴표(''' ''', """ """)로 감싸져서 표현된 문자, 단어들의 묶음을 지칭하는 자료형입니다. 따옴표 안에 숫자가 들어가도 자료형은 바뀌지 않습니다.

>>> numA = 'hello Python'
>>> numB = '123'
>>> print(numA, type(numA))
>>> print(numB, type(numB))

hello Python <class 'str'>
123 <class 'str'>

따옴표로 감싸진 문자열은 어떤 문자든 그대로 출력합니다. 하지만 이에 해당하지 않는 아래 세 가지 경우가 있습니다.

1. 따옴표 안에 같은 따옴표가 있을 경우

>>> 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

2. 이스케이프 시퀀스(escape sequence)를 사용한 경우

제어 시퀀스(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)
\ooo8진수로 ASCII 코드의 문자 표현
\xhh16진수로 ASCII 코드의 문자 표현
>>> print('\thello\n world')

hello
 world

3. 문자열 포맷팅을 사용한 경우(string formatting)

문자열의 특정 위치에 % 기호를 사용하여 원하는 or 변수를 삽입하는 것을 의미하며, 3가지 방법이 있습니다.

1) 서식 지정자(format specifier)

삽입할 값 or 변수의 data tyoe지정하여 대입하는 방식입니다. ‘[서식지정자]’ % 변수 , ‘[서식지정자A 서식지정자B]’ % (변수A, 변수B) 형식으로 작성합니다.

서식 지정자설명
%s문자열(string)
%c문자 1개(character)
%r문자열(따옴표 및 escape sequence를 문자 취급)
%d or %i정수(integer)
%08진수(octadecimal)
%x16진수(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학년도 대학수학능력시험은 20241116일 목요일 입니다.

% 뒤에 숫자를 붙이면 그 숫자만큼의 공간이 추가되고 오른쪽에 붙어서 출력됩니다. 왼쪽에 붙이고 싶다면 - 를 붙이면 됩니다.

>>> 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   

2) 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학년도 대학수학능력시험은 20241116일 목요일 입니다.

또 다른 방식으로, 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

3) 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

인덱싱(indexing) / 슬라이싱(slicing)

문자열을 하나로 보일지 몰라도, ‘한 문자’ 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.']
profile
sunrin 117th

0개의 댓글