Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python TypeError 오류 해결법: 리스트에는 리스트("int" 아님)만 연결할 수 있습니다

리스트는 다른 리스트와 연결(concatenate)할 수 있습니다. 즉, 한 리스트의 내용을 다른 리스트에 추가할 수 있다는 의미입니다. 하지만 정수처럼 다른 데이터 타입의 값은 리스트에 연결할 수 없습니다.

리스트에 정수를 연결하려고 하면 파이썬 인터프리터는 "TypeError: can only concatenate list (not "int") to list" 오류를 반환합니다.

이 글에서는 이 오류의 의미와 발생 원인을 살펴보고, 실제 예제를 통해 코드에서 이 문제를 해결하는 방법까지 단계별로 안내합니다.

TypeError: can only concatenate list (not "int") to list란?

연결(Concatenation)은 두 개의 리스트를 손쉽게 합칠 수 있는 방법입니다. extend() 메서드를 사용해 한 리스트를 다른 리스트에 추가할 수도 있지만, 연결은 더하기 기호(+) 하나만 사용하면 되기 때문에 더 간편합니다.

연결할 수 있는 객체는 리스트만이 아닙니다. 딕셔너리나 튜플처럼 반복 가능한(iterable) 객체라면 모두 연결할 수 있습니다.

다만, 서로 다른 데이터 타입의 객체는 연결할 수 없습니다. 즉, 리스트와 딕셔너리를 연결하거나, 정수와 리스트를 연결하는 것은 불가능합니다.

따라서 리스트에 단일 정수 항목을 연결하려고 시도하면 "TypeError: can only concatenate list (not "int") to list" 오류가 발생합니다.

오류 발생 예시

카페에서 금요일 하루 동안 특정 샌드위치가 몇 번 주문되었는지 추적하는 프로그램을 만들어 보겠습니다. 75번 이상 주문된 샌드위치만 필터링해서 어떤 샌드위치가 가장 인기 있는지 확인하고 싶습니다.

먼저 두 개의 리스트를 정의합니다. 하나는 샌드위치 이름 목록이고, 다른 하나는 각 샌드위치의 주문 횟수를 담은 리스트입니다.

sandwiches = ["Egg and Cress", "Chicken Club", "Hummus and Tomato", "Cheese"]
orders = [54, 77, 22, 98]

두 리스트는 각각 "sandwiches"와 "orders" 변수에 할당됩니다. 다음으로, 75번 이상 주문된 샌드위치의 인덱스 번호를 저장할 빈 리스트를 정의합니다.

orders_75 = []

현재 이 리스트는 비어 있습니다. 아직 어떤 샌드위치가 75번 이상 주문되었는지 확인하지 않았기 때문입니다.

다음으로, for 루프를 사용해 샌드위치와 주문 리스트를 순회하면서 어떤 샌드위치가 75번 이상 주문되었는지 찾아보겠습니다.

for s in range(0, len(sandwiches)):
	if orders[s] > 75:
		orders_75 = orders_75 + s

이 코드는 0부터 "sandwiches" 리스트의 길이까지 각 숫자를 반복합니다. 해당 샌드위치의 "orders" 리스트 값이 75보다 크면, 그 샌드위치의 인덱스 위치를 "orders_75" 리스트에 추가하려고 합니다.

그다음, 프로그램이 제대로 작동하는지 확인하기 위해 75번 이상 주문된 샌드위치를 출력하는 for 루프를 작성합니다.

for o in orders_75:
	print(sandwiches[o])

이제 파이썬 코드를 실행해 결과를 확인해 보겠습니다.

Traceback (most recent call last):
  File "main.py", line 9, in <module>
	orders_75 = orders_75 + s
TypeError: can only concatenate list (not "int") to list

코드 실행 결과 오류가 반환되었습니다.

해결 방법

오류 메시지에 언급된 코드 줄을 자세히 살펴보겠습니다.

	orders_75 = orders_75 + s

여기서 우리는 정수 값을 리스트에 연결하려고 하고 있습니다. 연산자 +를 통한 연결은 동일한 데이터 타입의 반복 가능한 객체 사이에서만 작동하기 때문에, 이 코드는 실행될 수 없습니다.

이 오류를 해결하려면 append() 메서드를 사용해 리스트에 항목을 추가해야 합니다. 이 메서드는 리스트에 항목을 추가하기 위해 특별히 설계된 것으로, 딕셔너리, 정수, 부동 소수점 숫자 등 어떤 데이터 타입의 항목이든 추가할 수 있습니다.

orders_75 관련 코드 줄을 append() 메서드를 사용하도록 수정합니다.

	orders_75.append(s)

append() 메서드는 리스트에 항목을 제자리(in-place)에서 바로 추가하기 때문에, 별도로 값을 다시 할당할 필요가 없습니다. 수정된 코드를 실행해 보겠습니다.

Chicken Club
Cheese

코드가 정상적으로 75번 이상 주문된 샌드위치 목록을 출력했습니다. 조건을 충족하는 샌드위치는 Chicken Club과 Cheese, 두 가지입니다.

마무리

"TypeError: can only concatenate list (not "int") to list" 오류는 리스트에 정수를 연결하려고 할 때 발생합니다.

이 오류는 리스트에는 리스트만 연결할 수 있기 때문에 발생합니다. 해결 방법은 간단합니다. append() 메서드를 사용해 리스트에 항목을 추가하면 됩니다.

이제 여러분도 전문가처럼 이 파이썬 오류를 손쉽게 해결할 수 있습니다!