01_Python

23_컬렉션>리스트

chuu_travel 2025. 1. 6. 13:55
728x90
01. 리스트
  • 여러 가지 자료를 저장할 수 있는 자료
    • 지금까지 활용한 숫자나 문자, 수식 등이 개별적인 자료라면, 리스트는 어떤 자료들을 모아서 사용할 수 있게 해주는 특별한 형태의 자료
  • 리스트 생성하는 법: 대괄호에 자료를 쉼표로 구분해서 입력
    • [요소, 요소, 요소...]
    • 대괄호 내부에 넣는 자료를 요소(element)라고 함
# 숫자만으로 구성된 리스트
list_num = [1, 2, 3, 4]

# 문자열만으로 구성된 리스트
list_str = ["a", "b", "c"]

# 여러 자료형으로 구성된 리스트
list_mix = [273, 32, 103, "문자열", True, False]

 

# 인덱싱, 슬라이싱
print(li)

 

<실행 결과>

[1, 2, 3, 4, 5]

 

print(li[0])

 

<실행 결과>

1

 

print(li[:-1])

 

<실행 결과>

[1, 2, 3, 4]

 

# 이중리스트
li = [1, 2, 3, ["a", "b", "c"]]
li[-1]

 

<실행 결과>

['a', 'b', 'c']

 

["a", "b", "c"][0]

 

<실행 결과>

'a'

 

li[-1][0]

 

<실행 결과>

'a'

 

 

02. 리스트 연산
  • 문자열에 적용할 수 있는 연산자는 리스트에도 활용할 수 있음
# 리스트 병합
a = [1, 2, 3]
b = [4, 5, 6]

print(a + b)

 


<실행 결과>

[1, 2, 3, 4, 5, 6]

 

 

# 리스트 반복
print(a * 2)

 

<실행 결과>

[1, 2, 3, 1, 2, 3]

 

 

03. 리스트 수정, 삭제

 

li

 

<실행 결과>

[1, 2, 3]

 

 

# 수정
li[2] = 4
li

 

<실행 결과>

[1, 2, 4]

 

 

# remove 함수를 이용한 삭제
li.remove(4)
li

 

<실행 결과>

[1, 2]

 

 

# remove 함수는 리스트에서 첫 번째로 나오는 특정 요소를 삭제하는 함수
li = [1, 2, 3, 1, 2, 3]

li.remove(3)

li

 

 

<실행 결과>

[1, 2, 1, 2, 3]

 

 

# pop 함수를 이용한 삭제
# 제거할 위치를 입력하지 않으면 기본값(-1)을 적용해서 리스트의 맨 마지막 요소를 반환하고 해당 요소를 삭제
li = [1, 2, 3]

print(li.pop())  #pop은 무엇을 지우는지 알려줌

print(li)

 

<실행 결과>

3
[1, 2]

 

 

# 특정 인덱스의 요소를 반환하는 것도 가능
li = [1, 2, 3]

print(li.pop(1))

print(li)

 

<실행 결과>

2
[1, 3]

 

 

04. 요소 추가

 

# 리스트 뒤에 요소를 추가
li.append(5)
li

 

<실행 결과>

[1, 3, 5]

 

li.append([1, 2, 3])
li

 

<실행 결과>

[1, 3, 5, [1, 2, 3]]

 

 

# 요소 삽입
# 괄호 안에서 정한 위치에 요소를 삽입
# 해당 위치의 요소는 뒤로 하나씩 밀림
li = [1, 2, 3]

li.insert(0, 4)  #insert(위치, 요소)

print(li)

 

<실행 결과>

[4, 1, 2, 3]

 

 

# 리스트 확장
# 리스트 뒤에 새로운 리스트의 요소를 모두 추가
# 한 번에 여러 요소를 추가하고 싶을 때 사용
li.extend([4, 5])
print(li + [1, 2, 3])  ## +는 원본을 파괴하지 않음

 

<실행 결과>

[4, 1, 2, 3, 4, 5, 1, 2, 3]

 

print(li)

 

<실행 결과>

[4, 1, 2, 3, 4, 5]

 

 

※리스트 연결 연산자와 리스트 확장의 차이

  • 공통점
    • 리스트 연결 연산자와 extend() 함수는 비슷한 형태로 동작
      • 리스트와 리스트를 연결 -비파괴적
  • 차이점
    • 리스트 연결 연산자(+)는 원본 리스트에 아무런 영향을 주지 않음
    • extend() 함수는 원본 리스트에 직접적인 영향을 줌 -파괴적
  • 기본적으로 자료는 비파괴적으로 사용하는 것이 편리
    • 원본으로도 활용할 수 있고 새로운 결과도 활용할 수 있으므로 선택지가 더 넓기 때문
    • 따라서 기본 자료형(숫자, 문자열, 불)과 관련된 것들은 비파괴적으로 작동
    • 하지만 리스트는 용량이 매우 커질 수 있음
    • 용량이 얼마나 커질 지 알 수 없기 때문에 원본과 결과 두 가지 상태를 다 생성하는 것은 위험할 수 있음
    • 이런 경우 원본 데이터를 직접 조작하는 기능을 통해 위험을 회피

 

05. 리스트 관련 함수

 

# 리스트 오름차순 정렬
li = [1, 4, 3, 2]

li.sort()

print(li)
[1, 2, 3, 4]

 

 

# 내림차순 정렬
li.sort(reverse = True)
print(li)
[4, 3, 2, 1]

 

 

# 리스트 뒤집기
li = ["a", "c", "b", "d"]

li.reverse()  ### reverse는 파괴적

print(li)
['d', 'b', 'c', 'a']

 

 

[시작인덱스 : 종료인덱스 : 증감값] default 1

 

print(li[::-1])  ###print(li[시작index : 종료index : -1])   ###slicing은 비파괴적
['a', 'c', 'b', 'd']

 

print(li)
['d', 'b', 'c', 'a']

 

# 위치 반환
li = [1, 2, 3]

li.index(3)
2

 

 

# 리스트에 포함된 요소의 개수 세기
li = [1, 2, 3, 1]

li.count(1)
2

 

 

# 리스트의 길이 구하기
len(li)
4

 

# 리스트 내부 요소를 모두 제거
li.clear()
print(li)
[]

 

 

06. 확인문제
  • list_a 를 적절하게 가공하여 문제에서 제시하는 데이터 만들기
# 1. [0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5]
list_a = [0, 1, 2, 3, 4, 5]

print(list_a*2)
[0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5]

 

# 2. [0, 1, 2, 3, 4, 5, 10]
list_a = [0, 1, 2, 3, 4, 5]

list_a.append(10)

print(list_a)
[0, 1, 2, 3, 4, 5, 10]

 

# 3. [0, 1, 2, 0, 3, 4, 5]
list_a = [0, 1, 2, 3, 4, 5]

list_a.insert(3, 0)

print(list_a)
[0, 1, 2, 0, 3, 4, 5]

 

# 4. [0, 1, 2, 4, 5]
list_a = [0, 1, 2, 3, 4, 5]

list_a.remove(3)

print(list_a)
[0, 1, 2, 4, 5]

 

# 5. [0, 1, 2, 3, 4]
list_a = [0, 1, 2, 3, 4, 5]

list_a.pop()

print(list_a)
[0, 1, 2, 3, 4]

 

728x90

'01_Python' 카테고리의 다른 글

25_컬렉션>딕셔너리  (0) 2025.01.07
24_컬렉션>튜플  (0) 2025.01.07
22_컬렉션>컬렉션 종류 및 개요  (0) 2025.01.03
21_Jupyter Notebook에서 표 작성방법  (0) 2025.01.03
20_변수>자료형 변환  (0) 2025.01.03