파이썬
[Python] 리스트(List)
다다x_x
2025. 2. 16. 16:41
컬렉션(Collection)
하나의 변수에 여러 개의 값을 저장할 수 있는 자료구조
예) 리스트, 튜플, 딕셔너리 등
리스트 (List)
순서대로 정리된 컬렉션!
- []
- 항목 ,(콤마)로 구분
- 인덱스(순번)로 접근 가능 (0부터)
- 파이썬의 경우, 자료형이 달라도 같은 리스트에 저장 가능
리스트의 생성, 수정, 삭제
# 리스트 생성
numbers = [0, 1, 2, 1, 3, 4]
users = ['Kim', 'Choi', 'Park', 'Min']
arr = ['Kim', 1, 'Choi', 2, 'Park', [3, 4]]
# index는 0번부터!
numbers[0] # 0
numbers[-1] # 4
# 리스트 수정
users[-1] = 'dada' # users = ['Allen', 'Choi', 'Park', 'dada']
# 리스트 삭제 (인덱스)
# del 리스트[index]
del users[-1] # users = ['Allen', 'Choi', 'Park']
del users # users자체 전체 삭제!
# .pop(index)
numbers.pop(-1) # 4 반환&삭제
nums.pop() # index 0
# 리스트 삭제 (값)
# .remove(value)
numbers.remove(1) #numbers = [0, 2, 1, 3]
# 동일 데이터의 경우, 먼저 나오는 데이터만 삭제!
리스트의 추가, 삽입
user1 = ['dada', '70']
user2 = ['mumu', '50']
# 추가 .append(value)
user1.append(100) # ['dada', '70', 100]
user2 = user2 + [150, ] # ['mumu', '50', 150]
# 삽입 .insert(index, value)
user1.insert(1, 100) # ['dada', 100, '70', 100]
user2.insert(5, 100) # ['mumu', '50', 150, 100]
# 길이를 넘어가면 그냥 맨마지막에 삽입
리스트의 슬라이싱
- 리스트[start:end:step]
- start는 포함, end는 미포함
- default
- start 0
- end 끝까지 포함
- step 1
nums = [1, 2, 3, 4, 5, 6, 7]
nums[2:6] # [3, 4, 5, 6]
nums[6:2] # []
nums[:2] # [1, 2]
nums[2:6:2] # [3, 5]
리스트의 참조 복사
- 리스트는 주소를 참조
리스트2 = 리스트1 #같은 리스트 참조
리스트2 = 리스트1.copy() #복사한 새로운 리스트
리스트2 = 리스트1[:] #복사한 새로운 리스트
id(리스트) #메모리 확인
리스트1 is 리스트2 #같은 메모리 참조인지
리스트의 함수
nums = [33, 22, 11, 77, 55, 66, 99, 88]
# 리스트의 길이
# len(리스트)
len(nums) # 8
# 정렬
# .sort()
nums.sort() # [11, 22, 33, 55, 66, 77, 88, 99]
nums.sort(reverse=True) # [99, 88, 77, 66, 55, 33, 22, 11]
nums.reverse() # [11, 22, 33, 55, 66, 77, 88, 99]
# sorted(리스트) 원본 데이터 변경X
sorted(nums)
# 값의 인덱스
# .index(value)
nums.index(22) # 1
# 리스트 병합
# .extend()
nums1 = [11, 22]
nums2 = [33, 44]
nums1.extend(nums2) # nums1 = [11, 22, 33, 44]
nums3 = nums1 + nums2 # nums3 = [11, 22, 33, 44, 33, 44]
# 값의 개수
# .count()
nums.count(22) # 1
리스트와 문자열
- index와 slice 모두 사용 가능
- str은 인덱스로 수정, 삭제(del) 불가
- str의 특정 값 수정 가능
- .replace(value, new)
- str의 특정 값 수정 가능
# 문자열 -> 리스트
text = 'text'
chars = list(text)
# 리스트 -> 문자열
text2 = ''.join(chars) # text
text2 = '/'.join(chars) # t/e/x/t
예시 문제
백준 10988 [펠린드롬인지 확인하기]
https://www.acmicpc.net/problem/10988
펠린드롭은 대칭이 되는 문자열
예) level, aadaa, noon
문자열의 인덱스를 이용해서 풀이 가능!
word = input()
# index 0 ~ 문자열 길이의 절반까지 반복
# 홀수 길이인 경우, 중앙의 한 문자는 비교 필요X
for i in range(len(word)//2):
if word[i] != word[-(i+1)]: # 앞뒤에서 같은 순번의 문자 비교
print(0)
break
else : # for문 문제 없이 마칠 경우
print(1)
백준 10807 [개수 세기]
https://www.acmicpc.net/problem/10807
총 N개의 정수가 주어졌을 때, 정수 v가 몇 개인지 구하기
리스트의 .count(value)를 사용하여 풀이 가능!
nums_len = int(input())
nums = list(map(int, input().split()))
num = int(input())
print(nums.count(num))
백준 10813 [공 바꾸기]
https://www.acmicpc.net/problem/10813
1 ~ N번 바구니에 각 바구니 번호가 적힌 공이 들어있다.
M번 공을 바꿀 것이다.
공을 바꿀 두 바구니를 선택하여, 들어있는 공을 서로 교환한다.
인덱스를 바구니 번호라고 가정하고 풀이!
n, m = map(int, input().split())
baskets = list(range(n+1))
for _ in range(m) :
basket1, basket2 = map(int, input().split())
baskets[basket1], baskets[basket2] = baskets[basket2], baskets[basket1]
print(*baskets[1:])