COMPUTER SCIENCE/Python

[Python] 리스트(List) 심화 - 파이썬 자료구조

Ungbae 2025. 5. 28. 22:06

본 강의는 학부 강의 '컴퓨터 프로그래밍 1'과 강의 교재 '파워 유저를 위한 파이썬 Express' 의 내용을 바탕으로 이해한 내용을 작성하였습니다.

 

 

리스트가 어떤 친구인지 알았으니, 이제 리스트를 잘 이용할 수 있도록 고급 스킬들을 알아보도록 하자.

추후에 리스트에 등장하는 인덱스 개념은 전공 자료구조에 정말 흔히 쓰이는 단어이니 나와 물아일체가 되도록 체득하자.

 

 

 

 

 

리스트 합병과 복제

 

heroes1 = ["Ironman", "Thor"]
heroes2 = ["Hulk", "Hawkeye"]
avengers = heroes1 + heroes2

# avengers의 리스트는 ["Ironman", "Thor", "Hulk", "Hawkeye"] 가 된다.



# numbers = [5, 6, 7, 8] * 3
# 이 리스트는 어떻게 될지 생각해보자.

 

  • 늘 그렇듯 코딩의 세계에서는 + 연산자는 단순 덧셈이 아니다. 여기서는 두 집합의 원소들이 하나로 합쳐지는 개념이다.

 

 

 

리스트 비교

list1 = [1, 2, 3]
list2 = [1, 2, 3]
print(list1 == list2)

# True

 

list1 = [3, 4, 5]
list2 = [1, 2, 3]
print(list1 > list2)

# True

 

 

  • 리스트와 리스트를 비교할 때, 요소들이 기초 자료형(정수, 실수, 문자열)이 아니고 사용자가 정의한 객체인 경우에는, 사용자가 객체 안에 == 연산과 != 연산을 정의하여야 한다.

 

 

 

 

 

 

 

리스트 복사

 

얕은 복사

temps = [31, 28, 32, 34, 24, 25, 23]
values = temps

print(temps)			# temps 리스트 출력
values[3] = 39			# values 리스트 변경
print(temps)			# temps 리스트가 변경되었다.


# 출력 예시
# [31, 28, 32, 34, 24, 25, 23]
# [31, 28, 32, 34, 24, 25, 23]

 

 

깊은 복사

temps = [31, 28, 32, 34, 24, 25, 23]
values = list(temps)

 

list()는 리스트 객체의 생성자. 객체를 생성하고 초기화하는 함수. 다른 객체들을 받아서 리스트로 변환한다.

 

 

 

 

슬라이싱

# Syntax
# 리스트[ start : stop ]

# e.g.
numbers = [ 10, 20, 30, 40, 50, 60, 70, 80, 90 ]
sublist = numbers[2 : 7]

 

 

  • 시작과 끝 인덱스는 생략이 가능하다.
numbers[:3]			# [10, 20, 30]
numbers[3:]			# [40, 50, 60, 70, 80, 90]
numbers[:]			# [10, 20, 30, 40, 50, 60, 70, 80, 90]

new_numbers = numbers[:]		# 깊은 복사가 된다.

 

 

 

 

고급 슬라이싱

# Syntax
# 리스트[ start : stop : step ]

numbers = [ 10, 20, 30, 40, 50, 60, 70, 80, 90 ]
sublist = numbers[2:7:2]

 

 

 

 

 

 

리스트 역순으로 만들기

numbers = [10, 20, 30, 40, 50, 60, 70, 80, 90]
numbers[::-1]

# 출력 결과
# [90, 80, 70, 60, 50, 40, 30, 20, 10]

 

 

리스트 변경

list = [1, 2, 3, 4, 5, 6, 7, 8]
list[0:3] = ['white', 'blue', 'red']
list

# 출력 결과
# ['white', 'blue', 'red', 4, 5, 6, 7, 8]

# 리스트 일부가 변경되었다.

 

list = [1, 2, 3, 4, 5, 6, 7, 8]
list[::2] = [100, 100, 100, 100]
list

# 출력 결과
# [100, 2, 100, 4, 100, 6, 100, 8]

# 100이 중간에 추가되었다.

 

list = [1, 2, 3, 4, 5, 6, 7, 8]
list[:]	= []
lst

# 출력 결과
# []

# 리스트의 모든 요소가 삭제되었다.
numbers = list(range(0, 10))		# 0에서 시작하여 9까지 저장하는 리스트
print(numbers)
del numbers[-1]			# 마지막 항목을 삭제. 즉, 리스트의 특정 요소를 삭제한다. 
print(numbers)

# 출력 결과
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# [0, 1, 2, 3, 4,5, 6, 7, 8]

 

 

 

 

문자열과 리스트

  • 문자열은 문자들이 모인 리스트라고 생각하면 편하다.

 

 

 

s = "power overwhelming"
print(s[0])
# p

print(s[6:10])
# over

 

 

 

 

 

불변 객체가 함수로 전달되면?

def func1(x):
	x = 42
	print("x=",x,"id=",id(x))

y = 10
func1(y)
print("y=",y,"id=",id(y))


# 출력 결과
# x = 42 id = 1640249990
# y = 10 id = 1640249268

 

변경이 불가능한 객체는 값으로 전달된다고 볼 수 있다. 객체의 참조값이 함수의 매개 변수로 전달되지만 함수 안에서 객체의 값을 변경하면 새로운 객체가 생성되기 때문이다.

 

 

 

 

 

 

 

리스트가 함수로 전달되면?

def func2(list):
	list[0] = 100

values = [0, 1, 1, 2, 3, 5, 8]
func2(values)
print(values)

# 출력 결과
# [100, 1, 1, 2, 3, 5, 8]

 

 

 

 

 

 

리스트 함축

# Syntax
## [ 수식 for (변수 in 리스트) if (조건) ]

squares = [ x*x for x in range(10) ]

# squares : 새로운 리스트
# x*x : 출력식으로 새로운 리스트의 요소가 된다.
# x : 입력 리스트에 있는 요소 x에 대하여
# range(10) : 입력 리스트

# 예시 코드

squares = []

for x in range(5):
	squares.append(x*x)

 

 

  • 리스트 함축에는 if를 사용하여 조건이 추가될 수 있다.

 

 

 

 

 

리스트 함축은 요즘 잘 쓰이지 않는다. 하지만 수많은 개발자 중 리스트 함축을 사용하여 코드를 짜는 스타일을 갖고 있는 사람도 있으니 나중에 오픈 소스 코드 등을 읽을 때 알아두면 읽기 수월할 것이다.