본문 바로가기
SK 쉴더스 루키즈/인프라 활용을 위한 파이썬

[인프라 활용을 위한 파이썬] 리스트

by seoyamin 2024. 11. 13.

리스트

여러 항목을 하나의 변수에 저장할 수 있는 데이터 구조

 

1. 기본 리스트와 중첩 리스트

① 기본 리스트

# 빈 리스트 선언
empty_list = []


# 숫자로 구성된 리스트 선언
number_list = [1, 2, 3, 4, 5]


# 문자열로 구성된 리스트 선언
string_list = ["python", "is", "good"]


# 여러 데이터 타입으로 구성된 리스트 선언
mixed_list = [1, 2, "python", "is", True]

 

 

② 중첩 리스트

리스트 안에 리스트가 포함된 형태

 

nested_list = [[1, 2, 3], [4, 5, 6], ["python", "is", "good"], [True, False]]

 

 

2. 리스트 생성 함수 list( )

# 문자열을 리스트로 변환
str = "Hello"
lst = list(str)
print(lst)      # ['H', 'e', 'l', 'l', 'o']


# 튜플을 리스트로 변환
tpl = (10, 20, 30)
lst = list(tpl)
print(lst)      # [10, 20, 30]


lst.append(40)
tpl = tuple(lst)
print(tpl)      # (10, 20, 30, 40)


# 딕셔너리를 리스트로 변환 -> 키값만 리스트로 반환
d = {'one':1, 'two':2, 'three':3}
lst = list(d)
print(lst)      # ['one', 'two', 'three']


# 집합을 리스트로 변환
s = {1, 2, 3}
lst = list(s)
print(lst)      # [1, 2, 3]

 

 

3. 리스트의 복사

얕은 복사

copied를 변경하면 original도 변하게 된다.

 

original = [1, 2, 3, 4, 5]
copied = original
print(original)     # [1, 2, 3, 4, 5]
print(copied)       # [1, 2, 3, 4, 5]


copied[0] = 10
print(copied)       # [10, 2, 3, 4, 5]
print(original)     # [10, 2, 3, 4, 5] <= original도 변함

 

깊은 복사

copied를 변경해도 original은 변하지 않는다.

 

# 슬라이싱을 이용한 깊은 복사
original = [1, 2, 3, 4, 5]
copied = original[:]
print(original)     # [1, 2, 3, 4, 5]
print(copied)       # [1, 2, 3, 4, 5]

copied[0] = 10
print(copied)       # [10, 2, 3, 4, 5]
print(original)     # [1, 2, 3, 4, 5] <= original은 변하지 않음



# copy() 메서드를 이용한 깊은 복사
original = [1, 2, 3, 4, 5]
copied = original.copy()
print(original)     # [1, 2, 3, 4, 5]
print(copied)       # [1, 2, 3, 4, 5]

copied[0] = 10
print(copied)       # [10, 2, 3, 4, 5]
print(original)     # [1, 2, 3, 4, 5] <= original은 변하지 않음



# copy 모듈을 이용한 깊은 복사
import copy

original = [1, 2, 3, 4, 5]
copied = copy.deepcopy(original)
print(original)     # [1, 2, 3, 4, 5]
print(copied)       # [1, 2, 3, 4, 5]

copied[0] = 10
print(copied)       # [10, 2, 3, 4, 5]
print(original)     # [1, 2, 3, 4, 5] <= original은 변하지 않음

 

 

4. 리스트 슬라이싱

리스트의 특정 부분을 추출하는 방법

 

list[start:end:step]
     ~~~~~ ~~~ ~~~~
     |     |   |
     |     |   +-- 항목을 선택하는 간격 (생략하면 1)
     |     +-- 슬라이싱을 끝낼 인덱스로 해당 인덱스는 포함되지 않음 
     +-- 슬라이싱을 시작할 인덱스 (생략하면 0)

 

fruits = ['apple', 'banana', 'cherry', 'durian', 'elderberry']


# 첫 두 요소를 가져와서 출력
print(fruits[:2])       # ['apple', 'banana'] <= 인덱스 0, 1


# 세번째 요소부터 마지막 요소까지 가져와서 출력
print(fruits[2:])       # ['cherry', 'durian', 'elderberry'] <= 인덱스 2, 3, 4


# 두번째 요소부터 네번째 요소까지 가져와서 출력
print(fruits[1:4])      # ['banana', 'cherry', 'durian'] <= 인덱스 1, 2, 3


# 모든 요소를 가져와서 출력
print(fruits[:])        # ['apple', 'banana', 'cherry', 'durian', 'elderberry'] <= 인덱스 0, 1, 2, 3, 4


# 간격을 지정해서 슬라이싱
print(fruits[::2])      # ['apple', 'cherry', 'elderberry'] <= 인덱스 0, 2, 4
print(fruits[1::2])     # ['banana', 'durian'] <= 인덱스 1, 3  


# 음수 인덱스와 함께 슬라이싱
# 뒤에서부터 세번째 요소부터 마지막 요소까지 가져와서 출력
print(fruits[-3:])      # ['cherry', 'durian', 'elderberry'] <= 인덱스 2, 3, 4


# 리스트의 처음부터 마지막에서 두번째 항목까지 가져와서 출력
print(fruits[:-2])      # ['apple', 'banana', 'cherry', 'durian'] <= 인덱스 0, 1, 2, 3


# 리스트 역순으로 출력
print(fruits[::-1])     # ['elderberry', 'durian', 'cherry', 'banana', 'apple'] <= 인덱스 4, 3, 2, 1, 0

 

 

5. 리스트 항목 추가 / 삭제

 추가

append( ), insert( ) 이용

 

# append() : 리스트의 끝에 요소를 추가
fruits = [ 'apple', 'banana', 'cherry' ]
fruits.append('orange')
print(fruits)       # ['apple', 'banana', 'cherry', 'orange']


# insert(index, value) : 리스트의 index 위치에 value를 삽입
fruits.insert(1, 'grape')
print(fruits)       # ['apple', 'grape', 'banana', 'cherry', 'orange']

 

 삭제

remove( ), pop( ), 슬라이싱, del 등을 이용

 

# remove(value) : 리스트에서 첫번째로 일치하는 항목을 제거
fruits = ['apple', 'banana', 'cherry', 'banana', 'banana', 'grape']
fruits.remove('banana')        
print(fruits)                   # ['apple', 'cherry', 'banana', 'banana', 'grape']


# pop() : 리스트에서 마지막 항목을 제거하고 반환
popped_item = fruits.pop()      
print(fruits)                   # ['apple', 'cherry', 'banana', 'banana']
print(popped_item)              # grape


# pop(index) : 리스트에서 해당 인덱스의 항목을 제거하고 반환
popped_item = fruits.pop(1)    
print(fruits)                   # ['apple', 'banana', 'banana']
print(popped_item)              # cherry


# 슬라이싱을 이용해서 특정 범위의 항목을 제거
fruits = ['apple', 'banana', 'cherry', 'banana', 'banana', 'grape']
fruits[1:3] = []                # 1번 인덱스부터 3번 인덱스 전까지 제거
print(fruits)                   # ['apple', 'banana', 'banana', 'grape']


# del 키워드를 이용해서 특정 인덱스의 항목을 제거
fruits = ['apple', 'banana', 'cherry', 'banana', 'banana', 'grape']
del fruits[1]                    # 1번 인덱스 제거
print(fruits)                    # ['apple', 'cherry', 'banana', 'banana', 'grape']


# del 키워드와 슬라이싱을 이용해서 특정 범위의 항목을 제거
fruits = ['apple', 'banana', 'cherry', 'banana', 'banana', 'grape']
del fruits[1:3]                  # 1번 인덱스부터 3번 인덱스 전까지 제거
print(fruits)                    # ['apple', 'banana', 'banana', 'grape']

 

 

6. 리스트 항목의 존재 여부 확인

리스트 안에 특정 값이 존재하는지 확인하는 연산자 in을 이용 

 

fruits = ['apple', 'banana', 'cherry']


# banana가 fruits 리스트에 포함되어 있는지 확인
if 'banana' in fruits:
    print('바나나가 있습니다.')
else:
    print('바나나가 없습니다.')


# not in 연산자
# 리스트 안에 특정 값이 존재하지 않는지 확인하는 연산자
if 'orange' not in fruits:
    print('오렌지가 없습니다.')
else:  
    print('오렌지가 있습니다.')

 

 

7. 리스트 메서드

요소의 개수

count( ) 함수 이용

 

# count(value) : 리스트에 포함된 요소(value)의 개수를 반환
fruits = ['apple', 'banana', 'cherry', 'bnana', 'orange', 'banana' ]  
banana_count = fruits.count('banana')
print(banana_count)         # 3

 

요소 정렬

sort( ) 함수 이용

 

# sort() : 리스트의 요소를 정렬
fruits = ['apple', 'banana', 'cherry', 'bnana', 'orange', 'banana' ]  
fruits.sort()
print(fruits)               # ['apple', 'banana', 'banana', 'bnana', 'cherry', 'orange']

 

③ 요소 역순 정렬

reverse( ) 함수 이용

 

# reverse() : 리스트의 요소를 역순으로 뒤집음
fruits = ['apple', 'banana', 'cherry', 'bnana', 'orange', 'banana' ]
fruits.reverse()            # fruits[::-1]과 동일
print(fruits)               # ['banana', 'orange', 'bnana', 'cherry', 'banana', 'apple']

 

④ 모든 요소 제거

clear( ) 함수 이용

 

# clear() : 리스트의 모든 요소를 제거  
fruits = ['apple', 'banana', 'cherry', 'bnana', 'orange', 'banana' ]
fruits.clear()
print(fruits)               # []