파이썬의 리스트(List)는 데이터 구조 중 하나로, 여러 개의 값을 순차적으로 저장할 수 있는 mutable(변경 가능)한 자료형.리스트는 다양한 자료형의 데이터를 혼합하여 저장할 수 있고, 리스트 내의 요소에 접근하거나 수정, 삭제가 가능하다.
리스트의 기본 사용법과 자주 사용되는 내부 메서드들에 대해 설명한다.
1. 리스트 생성 및 기본 사용법
리스트는 대괄호 []
를 사용하여 생성할 수 있다.
list() 로도 생성 가능하다.
리스트는 다양한 자료형을 포함할 수 있으며, 인덱스를 통해 요소에 접근할 수 있다.
# 리스트 생성
numbers = [1, 2, 3, 4, 5]
mixed = [1, "apple", 3.14, True]
line = input("공백으로 구분하여 숫자 입력").split()
print(line)
array = list(map(int,line))
print(array)
# 리스트 요소 접근
print(numbers[0]) # 출력: 1
print(mixed[1]) # 출력: "apple"
리스트는 0부터 시작하는 인덱스를 가지며, 음수 인덱스를 사용하여 리스트의 뒤에서부터 요소에 접근할 수도 있다.
# 음수 인덱스 사용
print(numbers[-1]) # 출력: 5
print(numbers[-2]) # 출력: 4
2. 리스트의 주요 메서드
append()
리스트의 끝에 새로운 요소를 추가한다.
numbers.append(6)
print(numbers) # 출력: [1, 2, 3, 4, 5, 6]
insert()
리스트의 특정 위치에 요소를 삽입한다.
numbers.insert(2, 10)
print(numbers) # 출력: [1, 2, 10, 3, 4, 5, 6]
pop()
리스트의 마지막 요소를 제거하고, 그 값을 반환한다. 인덱스를 지정하면 해당 위치의 요소를 제거한다.
last_element = numbers.pop()
print(last_element) # 출력: 6
print(numbers) # 출력: [1, 2, 10, 3, 4, 5]
remove()
리스트에서 첫 번째로 발견되는 특정 값을 제거한다.
numbers.remove(10)
print(numbers) # 출력: [1, 2, 3, 4, 5]
sort()
리스트의 요소를 오름차순으로 정렬한다. reverse=True
를 인자로 전달하면 내림차순으로 정렬할 수 있다.
numbers.sort()
print(numbers) # 출력: [1, 2, 3, 4, 5]
numbers.sort(reverse=True)
print(numbers) # 출력: [5, 4, 3, 2, 1]
len()
리스트의 길이(요소 개수)를 반환한다.
print(len(numbers)) # 출력: 5
sum()
리스트 요소의 합을 계산한다. 단, 리스트가 숫자로만 구성된 경우에만 사용 가능하다.
print(sum(numbers)) # 출력: 15
count()
리스트에서 특정 값이 몇 번 등장하는지 세어준다.
numbers = [1, 2, 3, 4, 2, 2, 5]
count_of_two = numbers.count(2)
print(count_of_two) # 출력: 3
index()
리스트에서 특정 값이 처음으로 등장하는 위치(인덱스)를 반환한다. 값이 리스트에 없으면 ValueError
가 발생한다.
index_of_four = numbers.index(4)
print(index_of_four) # 출력: 3
🤔연습문제: 백준 10807번 개수 세기
a =
arr =
n =
print()
3. 리스트 컴프리헨션(List Comprehension)
리스트 컴프리헨션은 리스트를 간결하게 생성할 수 있는 방법으로, 온라인 저지에서 반복적인 작업을 간결하게 처리하는 데 유용하다.
# 1부터 10까지의 제곱수를 가진 리스트 생성
squares = [x**2 for x in range(1, 11)]
print(squares) # 출력: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
4. 슬라이싱(Slicing)
슬라이싱은 list[start:end:step]
의 형태로 사용된다. 여기서 start
는 슬라이싱을 시작할 인덱스, end
는 슬라이싱을 멈출 인덱스(포함되지 않음), step
은 요소를 선택할 간격을 의미한다. 기본적으로 step
은 1로 설정된다.
기본적인 슬라이싱
슬라이싱은 특정 범위의 요소들을 선택하여 새로운 리스트를 생성한다. end
인덱스는 포함되지 않으므로, 슬라이싱 결과는 start
인덱스부터 end-1
인덱스까지의 요소들로 이루어진다.
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 인덱스 2부터 5까지 슬라이싱
sublist = numbers[2:6]
print(sublist) # 출력: [2, 3, 4, 5]
슬라이싱에서 start
, end
, step
생략하기
슬라이싱에서는 start
, end
, step
값을 생략할 수 있으며, 이 경우 기본값이 사용된다.
start
를 생략하면 리스트의 처음부터 시작한다.end
를 생략하면 리스트의 끝까지 포함한다.step
을 생략하면 기본값인 1이 적용된다.
# 리스트의 처음부터 인덱스 4까지 슬라이싱
print(numbers[:5]) # 출력: [0, 1, 2, 3, 4]
# 인덱스 5부터 끝까지 슬라이싱
print(numbers[5:]) # 출력: [5, 6, 7, 8, 9]
# 리스트 전체를 슬라이싱
print(numbers[:]) # 출력: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
step
을 사용한 슬라이싱
step
을 사용하면 일정 간격으로 요소를 선택할 수 있다. step
이 양수이면 앞에서부터, 음수이면 뒤에서부터 요소를 선택한다.
# 1칸씩 건너뛰며 슬라이싱
print(numbers[::2]) # 출력: [0, 2, 4, 6, 8]
# 리스트를 역순으로 슬라이싱
print(numbers[::-1]) # 출력: [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
슬라이싱을 사용하여 리스트 수정하기
슬라이싱은 단순히 새로운 리스트를 만드는 데만 사용하는 것이 아니라, 기존 리스트의 일부를 수정하거나 삭제할 때도 사용할 수 있다.
# 슬라이싱을 통한 부분 수정
numbers[2:5] = [20, 30, 40]
print(numbers) # 출력: [0, 1, 20, 30, 40, 5, 6, 7, 8, 9]
# 슬라이싱을 통한 요소 삭제
numbers[2:5] = []
print(numbers) # 출력: [0, 1, 5, 6, 7, 8, 9]
5. 기타 자주 사용하는 메서드
reverse()
리스트의 요소 순서를 역순으로 뒤집는다.
numbers.reverse()
print(numbers) # 출력: [1, 2, 3, 4, 5]
extend()
다른 리스트의 모든 요소를 기존 리스트에 추가한다. 이 메서드는 두 리스트를 연결할 때 사용된다.
numbers.extend([6, 7, 8])
print(numbers) # 출력: [1, 2, 3, 4, 2, 2, 5, 6, 7, 8]
copy()
리스트의 얕은 복사본(shallow copy)을 반환한다. 리스트의 요소들이 참조하는 객체들까지 복사하지는 않는다.
numbers_copy = numbers.copy()
print(numbers_copy) # 출력: [1, 2, 3, 4, 2, 2, 5, 6, 7, 8]
clear()
리스트의 모든 요소를 제거하여 빈 리스트로 만든다.
numbers.clear()
print(numbers) # 출력: []
7. 추가적으로 알아두면 좋은 사항
리스트와 반복문
리스트는 반복문과 함께 자주 사용된다. for
루프를 사용하여 리스트의 각 요소에 접근할 수 있으며, 이 방법은 특정 작업을 리스트의 모든 요소에 적용할 때 유용하다.
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
print(fruit)
🤔연습문제 BOJ 10871번 X보다 작은 수
n, x = map(int, input().split())
sequence = input().split()
answer = []
for i in sequence:
if int(i) < x:
answer.append(i)
print(' '.join(answer))
in
연산자
in
연산자를 사용하여 리스트에 특정 값이 포함되어 있는지 확인할 수 있다.
if "banana" in fruits:
print("Banana is in the list.")
🤔연습문제 BOJ 5597번 과제 안 내신 분..?
#방법 1. 없으면 새 리스트에 추가하는 방법.
#방법 2. 출석번호에서 지우는 방법.
8. 리스트와 함께 자주 쓰이는 함수
파이썬에서 리스트와 관련된 함수는 메서드와는 달리 리스트 객체에 직접 호출되지 않고, 독립적으로 사용되는 함수들이다.
len()
- 리스트의 길이(요소의 개수)를 반환한다.
- 사용법:
len(list)
- 예시:
my_list = [1, 2, 3, 4] length = len(my_list) print(length) # 출력: 4
max()
- 리스트에서 가장 큰 값을 반환한다.
- 사용법:
max(list)
- 예시:
my_list = [1, 2, 3, 4] maximum = max(my_list) print(maximum) # 출력: 4
min()
- 리스트에서 가장 작은 값을 반환한다.
- 사용법:
min(list)
- 예시:
my_list = [1, 2, 3, 4] minimum = min(my_list) print(minimum) # 출력: 1
sum()
- 리스트의 모든 요소를 합산하여 반환한다.
- 사용법:
sum(list)
- 예시:
my_list = [1, 2, 3, 4] total = sum(my_list) print(total) # 출력: 10
sorted()
- 리스트를 정렬하여 새로운 리스트를 반환한다. 원본 리스트는 변경되지 않는다.
- 사용법:
sorted(list, reverse=False)
- 예시:
my_list = [3, 1, 4, 2] sorted_list = sorted(my_list) print(sorted_list) # 출력: [1, 2, 3, 4]
list()
- 이터러블(iterable)을 리스트로 변환한다.
- 사용법:
list(iterable)
- 예시:
tuple_example = (1, 2, 3) my_list = list(tuple_example) print(my_list) # 출력: [1, 2, 3]
map()
- 리스트의 각 요소에 함수를 적용한 결과를 반환한다. 반환되는 객체는 이터레이터(iterator)로, 이를 리스트로 변환하기 위해서는
list()
와 함께 사용할 수 있다. - 사용법:
map(function, list)
- 예시:
my_list = [1, 2, 3, 4] result = list(map(lambda x: x * 2, my_list)) print(result) # 출력: [2, 4, 6, 8]
filter()
- 리스트의 각 요소에 함수를 적용하여 조건에 맞는 요소들만 걸러내어 반환한다. 반환되는 객체는 이터레이터(iterator)이다.
- 사용법:
filter(function, list)
- 예시:
my_list = [1, 2, 3, 4] result = list(filter(lambda x: x % 2 == 0, my_list)) print(result) # 출력: [2, 4]
zip()
- 두 개 이상의 리스트의 요소들을 묶어서 튜플의 리스트로 반환한다.
- 사용법:
zip(list1, list2, ...)
- 예시:
list1 = [1, 2, 3] list2 = ['a', 'b', 'c'] result = list(zip(list1, list2)) print(result) # 출력: [(1, 'a'), (2, 'b'), (3, 'c')]
이 함수들은 리스트를 처리하거나 조작할 때 자주 사용되는 함수들이다. 각 함수는 리스트의 특정 작업을 보다 편리하게 수행할 수 있게 도와준다.
9. 추가적으로 알아두면 좋은 사항 2
객체전달, 값 전달. 깊은복사, 얕은복사 문제
- 아래 코드의 결과를 예측해 봅시다.
#목표: [[0], [1], [2], [3], [4], [5], [6]] 만들기!!
a = [0]
b = []
for i in range(7):
a[0]=i
b.append(a)
print(b)
a = [0]
b = []
for i in range(7):
a[0]=i
b.append(list(a))
print(b)
a = [0]
b = []
for i in range(7):
a[0]=i
b.append(a.copy())
print(b)
https://www.youtube.com/watch?v=LC5gZ9O7-YU&list=PLMsa_0kAjjrcxiSJnHNfzBN71D3zpYtkX&index=11
https://youtu.be/uxf4cTeonY4?list=PLMsa_0kAjjrcxiSJnHNfzBN71D3zpYtkX
https://youtu.be/KEhPKBpPJvI?list=PLMsa_0kAjjrcxiSJnHNfzBN71D3zpYtkX
https://docs.python.org/ko/3/library/stdtypes.html#sequence-types-list-tuple-range