[python] 이 반복적 인리스트 증가 코드가 왜 IndexError :리스트 할당 인덱스가 범위를 벗어 납니까?

다음 코드를 고려하십시오 :

i = [1, 2, 3, 5, 8, 13]
j = []
k = 0

for l in i:
    j[k] = l
    k += 1

print j

출력 (Win 7 32 비트의 Python 2.6.6)은 다음과 같습니다.

> Traceback (most recent call last):
>     j[k] = l IndexError: list assignment index out of range

나는 그것이 이해하지 못하는 단순한 것 같아요. 누군가 그것을 정리할 수 있습니까?



답변

j는 빈 목록이지만 [0]아직 존재하지 않는 첫 번째 반복에서 요소 에 쓰려고합니다 .

대신 목록 끝에 새 요소를 추가하려면 다음을 시도하십시오.

for l in i:
    j.append(l)

물론 기존 목록을 복사하기 만하면 실제로는이 작업을 수행 할 수 없습니다. 당신은 단지 할 것입니다 :

j = list(i)

또는 다른 언어의 배열처럼 Python 목록을 사용하려는 경우 요소를 null 값으로 설정 한 목록 ( None아래 예)을 사용하여 목록을 미리 만든 다음 나중에 특정 위치의 값을 덮어 쓸 수 있습니다.

i = [1, 2, 3, 5, 8, 13]
j = [None] * len(i)
#j == [None, None, None, None, None, None]
k = 0

for l in i:
   j[k] = l
   k += 1

알아야 할 것은 list개체가 존재하지 않는 인덱스에 값을 할당 할 수 없다는 것입니다.


답변

다른 옵션은 초기화하는 것입니다 j.

j = [None] * len(i)


답변

수행 j.append(l)대신 j[k] = l하고 피하기는 k전혀.


답변

당신은 또한 목록 이해를 사용할 수 있습니다 :

j = [l for l in i]

또는 진술을 사용하여 사본을 만드십시오.

j = i[:]


답변

j.append(l)

또한 소문자 “L”은 1과 혼동하기 쉽기 때문에 사용하지 마십시오.


답변

나는 파이썬 메소드 삽입 이 당신이 찾고있는 것이라고 생각합니다 .

위치 i에 요소 x를 삽입합니다. list.insert (i, x)

array = [1,2,3,4,5]

array.insert(1,20)

print(array)

# prints [1,2,20,3,4,5]


답변

j에 대한 사전 (연관 배열과 유사)을 사용할 수 있습니다.

i = [1, 2, 3, 5, 8, 13]
j = {} #initiate as dictionary
k = 0

for l in i:
    j[k] = l
    k += 1

print j

인쇄합니다 :

{0: 1, 1: 2, 2: 3, 3: 5, 4: 8, 5: 13}