가장 효율적인 방법
목록에서 슬라이스 인덱싱 을 사용하여 요소를 삽입 할 수도 있습니다 . 예를 들면 :
>>> a = [1, 2, 4]
>>> insert_at = 2 # Index at which you want to insert item
>>> b = a[:] # Created copy of list "a" as "b".
# Skip this step if you are ok with modifying the original list
>>> b[insert_at:insert_at] = [3] # Insert "3" within "b"
>>> b
[1, 2, 3, 4]
들어 지정된 인덱스에서 함께 여러 요소를 삽입 , 당신이해야 할 모든이 (가) 사용하는 것입니다 list
삽입 할 것을 여러 요소. 예를 들면 :
>>> a = [1, 2, 4]
>>> insert_at = 2 # Index starting from which multiple elements will be inserted
# List of elements that you want to insert together at "index_at" (above) position
>>> insert_elements = [3, 5, 6]
>>> a[insert_at:insert_at] = insert_elements
>>> a # [3, 5, 6] are inserted together in `a` starting at index "2"
[1, 2, 3, 5, 6, 4]
목록 이해력을 사용하는 대안 (그러나 성능면에서 매우 느림) :
대안으로 목록 이해도 를 사용하여 달성 할 수 있습니다 enumerate
. (하지만 이런 식으로하지 마십시오. 단지 설명을위한 것입니다) :
>>> a = [1, 2, 4]
>>> insert_at = 2
>>> b = [y for i, x in enumerate(a) for y in ((3, x) if i == insert_at else (x, ))]
>>> b
[1, 2, 3, 4]
모든 솔루션의 성능 비교
다음 timeit
은 Python 3.4.5의 1000 개 요소 목록과 모든 답변을 비교 한 것입니다.
슬라이스 삽입을 사용한 내 답변 -가장 빠름 (루프 당 3.08µsec)
mquadri$ python3 -m timeit -s "a = list(range(1000))" "b = a[:]; b[500:500] = [3]"
100000 loops, best of 3: 3.08 µsec per loop
슬라이스 된 목록의 병합을 기반으로 ATOzTOA의 승인 된 답변 -초 (루프 당 6.71µsec )
mquadri$ python3 -m timeit -s "a = list(range(1000))" "b = a[:500] + [3] + a[500:]"
100000 loops, best of 3: 6.71 µsec per loop
가장 많이 투표 한 Rushy Panchal의 답변list.insert(...)
-세 번째 (루프 당 26.5 usec)
python3 -m timeit -s "a = list(range(1000))" "b = a[:]; b.insert(500, 3)"
10000 loops, best of 3: 26.5 µsec per loop
내 대답 과 목록 이해 와enumerate
넷째 - (매우 느린 루프 당 168 마이크로 초 포함)
mquadri$ python3 -m timeit -s "a = list(range(1000))" "[y for i, x in enumerate(a) for y in ((3, x) if i == 500 else (x, )) ]"
10000 loops, best of 3: 168 µsec per loop
b = a[:].insert(2,3)
꽤 짧아 보이며 원래 목록에 영향을주지 않으며 매우 설명 적입니다.