질문
빈 목록을 만들고 10개의 요소를 보유하는 방법은 무엇인가요?
그 후에, 그 목록에 값을 할당하려고 합니다. 예를 들면:
xs = list()
for i in range(0, 9):
xs[i] = i
하지만, 그것은 IndexError: list assignment index out of range
을 반환합니다. 왜 그럴까요?
Editor's note:
파이썬에서, 목록은 고정된 용량이 없습니다, 하지만 이미 존재하지 않는 요소에 할당하는 것은 불가능합니다. 여기에서 제시된 답변들은 나중에 대체할 10개의 "더미" 요소를 가진 목록을 생성하는 코드를 보여줍니다. 그러나 대부분의 초보자들은 이 문제를 마주할 때 요소를 추가하여 목록을 구축하고 싶어합니다. 이는 .append
메서드를 사용하여 수행해야 하지만, 종종 목록을 더 직접적으로 만드는 문제별 방법이 있을 수 있습니다. 자세한 내용은 Why does this iterative list-growing code give IndexError: list assignment index out of range? How can I repeatedly add elements to a list?를 참조하십시오.
답변
xs[i] = value
와 같이 리스트에 할당할 수 없습니다. 이 경우 리스트는 적어도 i+1
개의 요소로 초기화되어 있어야 합니다(첫 번째 인덱스는 0이기 때문입니다). 대신, 리스트 끝에 요소를 추가하려면 xs.append(value)
를 사용하세요(리스트 대신 딕셔너리를 사용하는 경우 할당 표기법을 사용할 수 있습니다).
빈 리스트 만들기:
>>> xs = [None] * 10
>>> xs
[None, None, None, None, None, None, None, None, None, None]
위의 리스트의 기존 요소에 값을 할당하는 방법:
>>> xs[1] = 5
>>> xs
[None, 5, None, None, None, None, None, None, None, None]
리스트가 10개의 요소만 가지고 있기 때문에 xs[15] = 5
와 같은 것은 실패합니다.
range(x)
는 [0, 1, 2, ... x-1]의 리스트를 생성합니다.
# 파이썬 2.X에서만 사용 가능합니다. 3.X에서는 list(range(10))을 사용하세요.
>>> xs = range(10)
>>> xs
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
함수를 사용하여 리스트 만들기:
>>> def display():
... xs = []
... for i in range(9): # 리스트를 만드는 방법을 보여주기 위한 것입니다.
... xs.append(i)
... return xs
...
>>> print display()
[0, 1, 2, 3, 4, 5, 6, 7, 8]
리스트 내포(범위에 대해서는 모두 range(0,9)
를 반환할 수 있으므로 제곱을 사용합니다):
>>> def display():
... return [x**2 for x in range(9)]
...
>>> print display()
[0, 1, 4, 9, 16, 25, 36, 49, 64]
댓글