파이썬

[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)
# 문자열 -> 리스트
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:])