본문 바로가기
Python

파이썬 리스트, 튜플 (Python List, Tuple)

by wanttosleep1111 2023. 1. 7.

파이썬 리스트, 튜플 (Python List, Tuple)

 

1. 리스트 (list)

파이썬의 자료 구조 중 하나

순서가 있고, 수정 가능한 자료 구조

대괄호 [ ]로 작성되고, 리스트 내부 요소는 콤마(,)로 구분

하나의 리스트에는 다양한 자료형을 포함

이중 리스트 가능

추가, 수정, 삭제 가능

 

① 리스트 선언

a = [] # 빈 리스트
b = [1, 2, 3] # 숫자 요소를 담은 리스트
c = ['a', 'b', 'c'] # 문자(열) 요소를 담은 리스트
d = ['이순신', '세종대왕', 1, 2] # 문자(열), 숫자를 함께 담은 리스트
e = [[3, '아이유'], 5, '뉴진스'] # 리스트 내부에 리스트를 포함
print(a)
print(b)
print(c)
print(d)
print(e)

 

② 리스트 데이터 접근 : 인덱싱, 슬라이싱

 

  • 인덱싱(Indexing)

인덱스 번호로 접근하기

lst1 = ['재석', '명수', '홍철', '형돈', '하하', '준하']
print(lst1[1])

 

이중리스트 인덱스 번호로 접근하기

list2 = [1, 2, 3, ['재석', '홍철', '형돈']]

temp = list2[3]
print(temp[1])

print(list2[3][1])

 

  • 슬라이싱(Slicing)
lst1 = ['재석', '명수', '홍철', '형돈', '하하', '준하']

# 재석 ~ 형돈 데이터 접근하기
# 리스트명[시작인덱스:끝인덱스+1]
print(lst1[:4])
print(lst1[:]) # 시작, 끝 인덱스 생략
print(lst1[2:]) # 끝 인덱스 생략

이중 리스트 데이터 접근

# 이름, 나이, 혈액형 정보를 가진 이중리스트 만들기
lst3 = [['유재석', 50, 'B'], ['박명수', 52, 'A'], ['정준하', 51, 'A'], ['정형돈', 44, 'O'],['노홍철', 43,'O'], ['하하', 43, 'B']]
        
# 1. 명수의 나이, 혈액형 데이터에 접근해서 출력하기
# ~ 의 나이는 ~ 이고, 혈액형은 ~형입니다.
print(f'{lst3[1][0]}의 나이는 {lst3[1][1]}이고, 혈액형은 {lst3[1][2]}형 입니다.')

# 2. 재석의 혈액형 데이터 접근해서 출력하기
print(f'{lst3[0][0]}의 혈액형은 {lst3[0][2]}형 입니다.')

 

③ 리스트 반복 (연산자 활용)

lst1 = ['재석', '명수', '홍철', '형돈', '하하', '준하']
print(lst1 * 2)

리스트 더하기

lst5 = [1, 2, 3, 4]
lst6 = [5, 6, 7, 8]

lst5 + lst6

 

④ 리스트 관련 함수

리스트 값 추가
append() 리스트 끝에 값을 추가
extend() 리스트 끝에 여러 요소를 한꺼번에 값을 추가
insert() 리스트의 원하는 인덱스 위치에 값을 추가

 

리스트 값 삭제
키워드 del 인덱스 번호를 이용해서 삭제
remove() 값을 이용해서 삭제

 

기타 함수
index() 리스트 값 위치 반환
sort() 리스트 정렬
reverse() 리스트에 있는 값을 역순으로 뒤집기
len() 리스트의 값 개수 반환
pop() 마지막 값을 반환 후 리스트에서 제거

 

  • 리스트 값 추가 : append(), extend(), insert()
# append 함수 이용
lst1 = ['재석', '명수', '홍철', '형돈', '하하', '준하']
lst1.append('길')
print(lst1)

# extend 함수 이용
lst1 = ['재석', '명수', '홍철', '형돈', '하하', '준하']
lst1.extend(['전진', '길'])
print(lst1)

# insert 함수 이용
lst1 = ['재석', '명수', '홍철', '형돈', '하하', '준하']
lst1.insert(0, '광희')
print(lst1)

 

▶ 실습 : 추가할 위치 번호(1번부터 가능), 노래 제목, 가수를 입력 받고 music_list 리스트 안에 넣기

music_list = [['Ditto', '뉴진스'], ['사건의 지평선', '윤하'], ['Candy', 'NCT DREAM']]

 

더보기
music_list = [['Ditto', '뉴진스'], ['사건의 지평선', '윤하'], ['Candy', 'NCT DREAM']]

loc = int(input('추가 위치 번호 >> '))
song = input('노래 제목 >> ')
singer = input('가수 >> ')
                
music_list.insert(loc-1, [song, singer])

 

※ Tip : 리스트 값 수정 시 주의 사항

수정되는 요소의 개수와 새로 입력되는 요소의 개수를 맞춰줘야 하며, 요소의 개수가 맞지 않은 경우 오류 발생
슬라이싱으로 접근하여 [ ]로 감싼 요소 하나만 넣을 경우 리스트의 길이가 변형될 수 있다. → 데이터 훼손

 

lst6 = [0, 1, 2, 3, 4]

print('수정 전 : ', lst6[1])
lst6[1] = 5
print('수정 후 : ', lst6[1])

# 리스트 lst6에 슬라이싱을 한 후에 단일값을 넣어보기
lst6 = [0, 1, 2, 3, 4]
lst6[2:4] = 7

lst6 = [0, 1, 2, 3, 4]

print('수정 전 : ', lst6)
lst6[2:4] = [5]
print('수정 후 : ', lst6)
# 리스트 값의 수 자체가 줄어든다.

 

  • 리스트 값 삭제 : del 키워드, remove()
# del 키워드
list7 = [0, 1, 2, 3, 4, 5]
del list7[2]
list7

# remonve() 함수
list7 = ['a', 'b', 'c', 'd', 'e']
# 'c' 삭제
list7.remove('c')
list7

 

  • 리스트 값 위치 반환 : index()
lst8 = [9, 77, 13, 51, 100, 3]
print(lst8.index[4])

※ Tip : 리스트나 튜플이 아닌 그냥 문자열의 경우 find(), index() 사용

 

  • 리스트 정렬 : sort() 
lst8 = [9, 77, 13, 51, 100, 3]
lst8.sort() # 기본값 : 오름차순
print(lst8)

 

  • 리스트에 있는 값을 역순으로 뒤집기 : reverse()
lst8 = [9, 77, 13, 51, 100, 3]

lst8.reverse()
print(lst8)

※ Tip : sort()와 reverse()를 이용하면 내림차순 정렬도 가능

혹은, sort()의 매개변수 값을 reverse=True로 바꿔주기

(함수 매개변수 확인 shift+tab)

lst8 = [9, 77, 13, 51, 100, 3]

lst8.sort()
lst8.reverse()
print(lst8)

lst8 = [9, 77, 13, 51, 100, 3]

lst8.sort(reverse=True)
print(lst8)

 

  • 리스트의 값 개수를 반환 : len()
lst1 = ['a','b','c','d','e']
len(lst1)

 

  • 마지막 값을 반환 후 리스트에서 제거 : pop()
lst1 = ['a','b','c','d','e']
print('pop() 실행 전 : ', lst1)
lst1.pop()

print('pop() 실행 후 : ', lst1)

 


 

2. 튜플 (tuple)

파이썬 자료 구조 중 하나

순서가 있는 자료형

소괄호 ( )로 작성되어지며, 튜플 내부의 요소는 콤마(,)로 구분

하나의 튜플에 여러 자료형을 포함할 수 있다.

추가, 수정, 삭제가 불가능

 

① 튜플의 선언

a = ()
b = (1,2,3)
c = ('a','b','c')
d = (1, 2, 'a', 'b')
e = (1, 2, (3, 4, 5))

print(a)
print(b)
print(c)
print(d)
print(e)

# 변수에 다른 표시 없이 여러 값을 한 번에 담으면 튜플로 담긴다
f = 1,2,3
print(f)

 

② 튜플 데이터 접근 : 인덱싱, 슬라이싱

tuple1 = (('유재석', 50, 'B'), ('박명수', 52, 'A'))

 

  • 인덱싱(Indexing)
# 유재석의 혈액형에 접근
tuple1[0][2]

 

  • 슬라이싱(Slicing)
tuple1 = (('유재석', 50, 'B'), ('박명수', 52, 'A'))

# 박명수의 이름과 나이에 접근
print(tuple1[1][0:2])

# 박명수의 이름과 혈액형에 접근 (증감값 이용)
print(tuple1[1][::2])

 

③ 튜플 추가, 수정, 삭제 불가능

tuple1 = (('유재석', 50, 'B'), ('박명수', 52, 'A'))

# 튜플의 유재석 이름을 정준하로 바꿔보기
tuple1[0][0] = '정준하'


 

예제 : 다음 리스트에 있는 과일 이름을 입력 받으면 리스트 안의 과일 인덱스 번호를 출력하거나 과일이 없으면 없다는 실행문장을 출력하기

listf = ['딸기', '바나나', '복숭아', '체리', '사과']

 

listf = ['딸기', '바나나', '복숭아', '체리', '사과']

fruit = input('검색할 문자를 입력하세요 >> ')

if fruit in listf :
    print(f'{fruit}는 리스트 {listf.index(fruit)}번째 인덱스에 들어있습니다.')
else :
    print(f'{fruit}는 리스트에 들어있지 않습니다.')

 

예제 : 다음 문자열에서 사용자가 입력한 글자가 몇 개 포함되는지 출력하기

s = 'Hi, My name is Gildong'

 

s = 'Hi, My name is Gildong'

a = input('검색할 문자를 입력하세요 >> ')

if a in s :
    print(f'\'{a}\'는 {s.count(a)}번 들어 있습니다.')
else :
    print(f'\'{i}\'는 문자열에 들어있지 않습니다.')

 


 

3. 패킹(packing), 언패킹(unpacking)

# 리스트, 튜플 패킹

list1 = [1, 2, 3]
tuple1 = (4, 5, 6)
tuple2 = 7, 8, 9

print(list1)
print(tuple1)
print(tuple2)

 

# 리스트, 튜플 언패킹

list1 = [1, 2, 3]
tuple1 = (4, 5, 6)

a, b, c = list1
d, e, f = tuple1

print(a, b, c)
print(d, e, f)

 

댓글