x 리스트에서 조건에 맞는 값을 y리스트에 추가 후 출력하려고 하는데 아래와 같은 오류가 발생한다
x = ["grapes", "orange", "apple", "lime", "banana", "cherry", "kiwi", "blueberry", "watermelon"]
y = []
for i in x:
if (i == "apple") or (i == "kiwi"):
y.append(x[i])
print(y)
---------------------------------------------------------------------------
y.append(x[i])
~^^^
TypeError: list indices must be integers or slices, not str
TypeError: list indices must be integers or slices, not str
해석해 보면 "목록 인덱스는 문자열이 아닌 정수 또는 슬라이스여야 합니다."라고 나온다.
원인
파이썬을 처음 접하는 분들이 자주 하는 실수인데 반복문과 리스트를 같이 사용할 때 위 코드에서 i변수가 인덱스(0, 1, 2, 3....)값을 가지고 있다고 오해해서 발생한다.
간단하게 아래 코드로 알아보자
x = ["aaa", "bbb", "ccc"]
for i in x:
print(i)
-------------------------------------------
aaa
bbb
ccc
여기서 i는 인덱스(0, 1, 2...)를 가지는 것이 아닌 x리스트에서 각 요소의 값을 가지고 있는 것이다.(aaa, bbb, ccc)
다시 처음에 발생한 에러를 살펴보면
for i in x:
if (i == "apple") or (i == "kiwi"):
y.append(x[i])
print(y)
조건문에 의해 이미 i는 apple 또는 kiwk라는 값인데 이거를 인덱스로 착각하여 x[i]라고 적어서 발생한 오류이다.
해결 방법
i가 x리스트의 값이라 하였으니 그냥 i 하나만 적으면 된다.
x = ["grapes", "orange", "apple", "lime", "banana", "cherry", "kiwi", "blueberry", "watermelon"]
y = []
for i in x:
if (i == "apple") or (i == "kiwi"):
y.append(i)
print(y)
---------------------------------------------
['apple', 'kiwi']
반응형
'파이썬 > 에러' 카테고리의 다른 글
[파이썬] TypeError: int() argument must be a string, a bytes-like object or a number, not 'list' (0) | 2023.01.28 |
---|---|
[파이썬] TypeError : unsupported operand type(s) for (0) | 2023.01.22 |