Python

[Python] 리스트(List)의 여러 메소드

NaDuck 2023. 11. 16. 21:42

목차

1. 리스트(List)란?

2. 리스트의 선언

3. 아이템 추가

4. 아이템 삭제

5. 리스트 슬라이싱 (List slicing)

6. 특정 아이템의 인덱스 찾기

7. 리스트 정렬

 

 

리스트(List)란?

  • 다른 언어와 마찬가지로 여러 개의 데이터들을 순서대로 나열하여 인덱스로 접근할 수 있는 자료구조, 즉 배열을 파이썬에선 리스트라고 표현한다.
  • C언어와 같은 정적 배열이 아닌, 동적 배열이기 때문에 아이템을 쉽게 추가하거나 삭제하기 용이하다.

 

 

1. 선언

# 정수형 리스트
my_list1 = [1, 30, 12]

# boolean형 리스트
my_list2 = [True, True, False]

# string형 리스트
my_list3 = ['duck', 'hello', 'python']

# 여러 타입의 데이터들로 만들 수 있다.
my_list4 = ["나오리", True, 100]

 

 

 

2. 아이템 추가

  • 특정 인덱스 위치에 추가하고 싶다면 insert를,
  • 리스트의 가장 마지막에 추가하고 싶다면 append를 사용하는 편이다.

(1) insert 메소드

my_list = [1, 2, 3]

# 리스트명.insert(인덱스, 값): 인덱스에 해당 값을 삽입한다.
my_list.insert(1, 100) 

print(my_list) # [1, 100, 2, 3]

 

(2) append 메소드

my_list = [12, 49, 22]

# 리스트 마지막에 아이템을 추가할 때 사용한다.
my_list.append(100)

print(my_list) # [1, 2, 3, 100]

 

 

 

3. 아이템 수정

인덱스로 접근해 해당 리스트의 아이템을 수정한다.

my_list = [2, 'duck', 30]

my_list[0] = '안녕하세요'
my_list[1] = 'Python 좋아'

print(my_list) # ['안녕하세요', 'Python 좋아', 30]

 

 

 

4. 아이템 삭제

(1) del 메소드

파라미터로 삭제할 위치의 인덱스를 지정한다.

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

# my_list의 3번 인덱스의 원소를 삭제하고, 뒤의 원소들이 앞으로 한 칸씩 당겨진다.
del my_list[3] 

print(my_list) # [1, 2, 3, 5]

 

(2) pop 메소드

파라미터로 삭제할 위치의 인덱스를 지정할 수도 있고,

아무것도 넘겨주지 않으면 배열의 가장 마지막 아이템을 삭제한다.

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

a.pop(0)  
print(a) # [2, 3, 4, 5]

# 리스트의 마지막 아이템을 삭제한다.
a.pop()
print(a) # [1, 2, 3, 4]

 

(3) remove 메소드

파라미터로 삭제할 아이템 값을 지정한다.

✅ 리스트에 같은 값의 아이템이 여러 개 있다면 맨 앞의 아이템만 삭제된다.

리스트에 해당 값이 없을 경우 에러가 발생하므로 사용에 주의하자

my_list = ['a', 'b', 'c', 'd', 'e']

my_list.remove('b') 

print(my_list) # ['a', 'c', 'd', 'e']

# 리스트에 존재하지 않는 원소를 삭제하려면 에러가 난다.
my_list.remove('q') # ❌

'''
Traceback (most recent call last):
  File "...", line 9, in <module>
    my_list.remove('q')
ValueError: list.remove(x): x not in list
'''
# 아이템이 여러 개라면 최초 하나만 삭제한다.
my_list = ['a', 'a', 'a']

my_list.remove('a')

print(my_list) # ['a', 'a']

 

 

 

5. 리스트 슬라이싱 (list slicing)

list[start : stop : step]

start, stop, step을 이용해 리스트를 다양하게 슬라이싱 할 수 있다.

✅ 원본 리스트는 영향을 받지 않고, 슬라이싱한 결과 리스트를 따로 리턴한다.

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

# 인덱스 1 ~ 3까지 슬라이싱
print(my_list[1:4]) # [2, 3, 4]

# start를 생략하면 자동으로 start = 0
# 인덱스 0 ~ 1까지 슬라이싱
print(my_list[:2]) # [1, 2]

# end를 생략하면 자동으로 end = 리스트의 마지막
# 인덱스 1 ~ 끝까지 슬라이싱
print(my_list[1:] # [2, 3, 4, 5]

# start ~ end까지 2칸씩 띄우기
print(my_list[::2]) # [1, 3, 5]

 

✅ 리스트 슬라이싱으로 reversed 리스트를 쉽게 구할 수 있다.

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

print(my_list[::-1]) # [5, 4, 3, 2, 1]

 

 

 

6. 아이템으로 특정 인덱스 찾기

index 메소드 사용

my_list = ['a', 'b', 'c', 'd', 'e']

print(my_list.index('c')) # 2

# 존재하지 않는 원소를 찾으려고 하면 에러가 발생한다.
print(my_list.index('q')) # Error ❌

'''
Traceback (most recent call last):
  File "...", line 7, in <module>
    print(my_list.index('q'))
ValueError: 'q' is not in list
'''

 

index(value, start, end): start ~ end 사이에 있는 value의 인덱스를 리턴한다.

my_list = ['a', 'b', 'c', 'd', 'e', 'a', 'b']

# 2 ~ 5번 인덱스 내에서 'a' 찾기
print(my_list.index('a', 2, 6)) # 5

 

 

 

7. 리스트 오름차순 / 내림차순 정렬하기

(1) 리스트명.sort()

✅ 기본적으로 오름차순 정렬을 한다. 

✅ 내림차순 정렬을 하고 싶다면 파라미터로 reverse=True 옵션을 추가한다.

원본 리스트가 정렬된 상태를 유지한다.

# (1)
my_list = [10, 3, 1000, 35, -10]

my_list.sort()
print(my_list) 
# [-10, 3, 10, 35, 1000]


# (2)
my_list = [0.3, 3.14, 104.1, 30.9]

my_list.sort()
print(my_list) 
# [0.3, 3.14, 30.9, 104.1]


# (3)
my_list = [10, -1.3, 1000.0, 31, 15.5]

my_list.sort()
print(my_list) 
# [-1.3, 10, 15.5, 31, 1000.0]


# (4)
my_list = ['a', 'd', 'c', 'b']

my_list.sort()
print(my_list) 
# ['a', 'b', 'c', 'd']


# (5) 사전순 정렬
my_list = ['abc', 'abcde', 'aaa', 'a', 'abbbb'] 

my_list.sort()
print(my_list2) 
# ['a', 'aaa', 'abbbb', 'abc', 'abcde'] 


# (6)
my_list = ['가', '다', '나', '라']

my_list.sort()
print(my_list) 
# ['가', '나', '다', '라']


# (7) 유니코드 코드값 순으로 정렬
my_list = ['나', 'aaaaa', '가', '다', 'a', 'aaa']

my_list.sort()
print(my_list) 
# ['a', 'aaa', 'aaaaa', '가', '나', '다'] 


# (8) Error ❌
my_list = ['a', 14, 109.4, 'abc']

my_list.sort()
print(my_list) # ❌ 숫자와 문자열은 비교 불가능

'''
Traceback (most recent call last):
  File "...", line 42, in <module>
    my_list.sort()
TypeError: '<' not supported between instances of 'int' and 'str'
'''

 

리스트명.sort(reverse = True)

my_list = [15, 400, -12, 3]

my_list.sort(reverse=True)
print(my_list) # 결과: [400, 15, 3, -12]

 

 

(2) sorted() 함수

sort() 메소드와 달리 원본 리스트를 바꾸지 않고, 정렬된 새로운 리스트를 반환한다.

✅ 파라미터로 정렬할 리스트와 내림차순 정렬 reverse = True 옵션을 지정할 수 있다.

my_list = [5, 11, 100, 1, -3]

sorted_my_list = sorted(my_list)
print(sorted_my_list) # [-3, 1, 5, 11, 100]

 

sorted(list, reverse=True)

my_list = [5, 11, 100, 1, -3]

reverse_sorted = sorted(my_list, reverse=True)
print(reverse_sorted) # [100, 11, 5, 1, -3]