Eggs Sunny Side Up
본문 바로가기
언어/Python

리스트

by guswn100059 2023. 3. 29.

1. list(리스트)

- 파이썬 자료구조 중 하나

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

- 대괄호[]로 작성되고, 리스트 내부의 값을 콤마, 로 구분

- 하나의 리스트에는 다양한 자료형을 포함 ex)[1, "a", 3.14, [1, "b"]

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

 

1.1 리스트 선언

# 리스트명 = [요소1, 요소2, 요소3, ...]
a = [] # 빈 리스트 선언
b = [1, 2, 3, 4] # 숫자요소를 담은 리스트
c = ["이수하", "강수연", "정준화"] # 문자열 요소를 담은 리스트
d = [1, 2, '이경민', '김세현'] # 숫자, 문자열 요소를 담은 리스트
e = [1, 2, '이예은', '문현준', [1, 2, 3]] # 리스트 내부에 리스트를 포함한 리스트

# [] : 단일리스트
# [][] : 이중리스트

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

# []
# [1, 2, 3, 4]
# ['이수하', '강수연', '정준화']
# [1, 2, '이경민', '김세현']
# [1, 2, '이예은', '문현준', [1, 2, 3]]

 

1. 2 리스트 데이터 접근 : 인덱싱, 슬라이싱

# 인덱싱 : 리스트명[인덱스번호]
lst1 = [1, 3, 5, 7, 9]

# 숫자 5에 접근해보기
lst1[2]

# 숫자 9에 접근해보기
lst1[4]

lst2 = [1, 2, 3, ["a", "b", "c"]]

temp = lst[3] # 단일리스트
# ['a', 'b', 'c']

print(lst2[3][1]) # 이중리스트
# 이중리스트에서 원하는 요소에 접근할 때는 먼저 단일리스트화에서 다시 인덱싱
# b
# len() : 길이를 알려주는 함수
len(lst2)
lst2

# [1, 2, 3, ['a', 'b', 'c']]
# 리스트명[시작인덱스 : 끝인덱스+1]
# 인덱스 범위 : 시작인덱스 <= 인덱스 번호가 포함
				끝인덱스 < 인덱스 번호 미포함
lst3 = ['양승광', '김선제', '송안명', '이수하', '박현주']
lst3[2 : ]
lst3[0 : 3]
# 이중리스트를 만들고 데이터 접근해보기
# 이름, 좋아하는 숫자, 즐겨마시는 음료 정보 기반의 이중 리스트

lst4 = [["이범준", 3, "제로콜라"], ["이동훈", 6, "데자와"], ["강태호", 9, "사이다"], 
       ["박현주", 4, "아이스티"], ["유상빈", 7, "스무디"]]
       
# 이동훈의 숫자, 음료 정보 접근해서 출력하기
print(f"이동훈씨가 좋아하는 숫자는 {lst4[1][1]}이고, 좋아하는 음료는 {lst4[1][2]}.")
# 이동훈씨가 좋아하는 숫자는  6 이고 좋아하는 음료는  데자와

# 이범준, 강태호, 유상빈 정보를 리스트로 가져오기
lst4[ : : 2]
# [['이범준', 3, '제로콜라'], ['강태호', 9, '사이다'], ['유상빈', 7, '스무디']]

# 포매팅을 활용해서 이름과 음료 정보 출력하기
print(f"{lst4[0][0]}씨는 {lst4[0][2]} 음료를 좋아합니다.")
print(f"{lst4[1][0]}씨는 {lst4[1][2]} 음료를 좋아합니다.")
print(f"{lst4[2][0]}씨는 {lst4[2][2]} 음료를 좋아합니다.")
print(f"{lst4[3][0]}씨는 {lst4[3][2]} 음료를 좋아합니다.")
print(f"{lst4[4][0]}씨는 {lst4[4][2]} 음료를 좋아합니다.")
# 이범준씨는 제로콜라 음료를 좋아합니다.
# 이동훈씨는 데자와 음료를 좋아합니다.
# 강태호씨는 사이다 음료를 좋아합니다.
# 박현주씨는 아이스티 음료를 좋아합니다.
# 유상빈씨는 스무디 음료를 좋아합니다.

 

1.3 리스트 반복 : 연산자 활용

lst5 = [1, 2, 3, 4, 5]
lst5 * 3
# 곱해지는 수만큼 리스트가 반복
# [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5]

lst6 = [6, 7, 8, 9, 10]
lst5 + lst6
# 앞, 뒤의 리스트가 연결되는 개념
# [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

 

1.4 리스트 관련 함수

 

① 리스트 값 추가 1 : append()

-리스트 끝에 값을 하나 추가하는 기능

lst7 = ['김주미', '강수연', '김세현', '박상준', '문현준']
# 이동훈 추가해보기
lst7.append('이동훈')

lst7
# ['김주미', '강수연', '김세현', '박상준', '문현준', '이동훈']

② 리스트 값 추가 2 : extend()

- 여러 요소를 한꺼번에 추가해주는 기능

lst7.extend(['안다빈', '이예은', '강태호', '박종현'])

lst7
# ['김주미', '강수연', '김세현', '박상준', '문현준', '이동훈', '안다빈', '이예은', '강태호', '박종현']

fruits = ['사과', '샤인머스캣', ['귤', '멜론'], '오렌지']

apple = fruits[0]
melon = fruits[2][1]
orange = fruits[3]

choice_list = []
choice_list.append(apple)
choice_list.append(melon)
choice_list.append(orange)

print(choice_list)

# ['사과', '멜론', '오렌지']
type(choice_list)
# list

 

③ 리스트 값 추가 3 : insert()

- 원하는 인덱스 위치에 값을 추가하는 기능

- 형식 : 리스트명.insert(인덱스번호, 값)

choice_list.insert(1, "딸기")

choice_list
# ['사과', '딸기', '멜론', '오렌지']
# 자신이 좋아하는 과일을 원하는 위치에 추가
choice_list.insert(2, '참외')
choice_list.insert(4, '복숭아')

choice_list
# ['사과', '딸기', '참외', '멜론', '복숭아', '오렌지']

music_list = [["사건의 지평선", "윤하"], ["Nxde", "(여자)아이들"], ["Hype boy", "뉴진스"]]

loc = int(input("추가 위치 번호 >> "))
song = str(input("노래 제목 >> "))
singer = str(input("가수 >> "))

music_list.insert(loc-1, [song, singer])

 

④ 리스트 값 수정하기

choice_list
# ['사과', '딸기', '참외', '멜론', '복숭아', '오렌지']

# choice_list[0] = '귤'로 변경
print('수정 전 : ', choice_list[0])
choice_list[0] = '귤' # 귤이라는 새로운 데이터를 대입(할당)
print('수정 후 : ', choice_list[0])

# 수정 전 :  사과
# 수정 후 :  귤
choice_list[ : 2] = '바나나'

choice_list
# ['바', '나', '나', '참외', '멜론', '복숭아', '오렌지']
lst6 = [6, 7, 8, 9, 10]

lst6[ : 2] = [1]

lst6
# [1, 8, 9, 10]

 

⑤ 리스트 값 삭제

- del 키워드 : 인덱스번호를 이용해서 삭제

- remove() 함수 : 값을 이용해서 삭제

# del 키워드 사용
lst7 = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# lst7에서 숫자 7 삭제
del lst7[6]

lst7
# [1, 2, 3, 4, 5, 6, 8, 9, 10]

# 2 ~ 4까지의 숫자 삭제
del lst7[1 : 4]
# 여러 개의 데이터를 삭제할 때 유용(슬라이싱을 사용)

lst7
# [1, 5, 6, 8, 9, 10]
# remove() 함수
lst7
# [1, 5, 6, 8, 9, 10]

# 8 삭제하기
lst7. remove(8)

lst7
# [1, 5, 6, 9, 10]

=> del 키워드와 remove() 함수의 차이점

- del 키워드로 리스트 요소를 삭제할 경우 삭제된 요소의 인덱스가 사라지는 게 아니고 뒤의 요소가 당겨지므로 인덱스가 존재. 요소를 삭제하고자 할 때 요소가 없다는 오류는 발생하지 않음.

- remove() 함수를 이용하여 리스트 요소를 삭제한 경우 다시 삭제된 리스트 요소를 삭제하고자 할 때 요소가 없다는 오류가 발생됨.

  오류 발생 코드 => ValueError : list.remove(x) : x not in list

 

⑥ 리스트 정렬

- sort() : 기본값은 오름차순

- reverse() : 리스트에 있는 값을 역순으로 뒤집는 함수

lst8 = [9, 17, 2, 38, 55, 98, 67]
lst8.sort()
lst8 
# [2, 9, 17, 38, 55, 67, 98]
# reverse() 함수 : 리스트에 있는 값을 역순으로 뒤집는 함수
lst8.reverse()
lst8
# [98, 67, 55, 38, 17, 9, 2]

# 오름차순으로 정렬
lst8[::-1]
# [2, 9, 17, 38, 55, 67, 98]

 

⑦ 리스트 값 위치 반환

- index("찾을 요소")

lst8
# [98, 67, 55, 38, 17, 9, 2]

# 38의 인덱스 번호를 알기 위해서?
lst8.index(38)
# 3
text_str = "빅데이터 18회차 반입니다."

# '반'의 인덱스 번호 찾기
text_str.index('반')

# 10

 

⑧ 마지막 값을 반환하고 리스트에서 제거하는 함수

- pop()

lst9 = ['a', 'b', 'c', 'd', 'e']
lst9.pop()
# 'e'

lst9
# ['a', 'b', 'c', 'd']

 

'언어 > Python' 카테고리의 다른 글

반복문  (0) 2023.03.31
tuple(튜플)  (0) 2023.03.29
조건문  (0) 2023.03.28
연산자  (0) 2023.03.27
변수, 문자열 함수  (0) 2023.03.23

댓글