목록의 특정 인덱스에 요소를 삽입하고 업데이트된 목록을 반환합니다.
나는 다음을 가지고 있습니다.
>>> a = [1, 2, 4]
>>> print a
[1, 2, 4]
>>> print a.insert(2, 3)
None
>>> print a
[1, 2, 3, 4]
>>> b = a.insert(3, 6)
>>> print b
None
>>> print a
[1, 2, 3, 6, 4]
원래 목록을 업데이트하는 대신 업데이트된 목록을 결과적으로 얻을 수 있는 방법이 있습니까?
l.insert(index, obj)실제로 아무것도 돌려주지 않습니다.그것은 단지 목록을 업데이트합니다.
ATO가 말했듯이, 당신은 할 수 있습니다.b = a[:index] + [obj] + a[index:]그러나 다른 방법은 다음과 같습니다.
a = [1, 2, 4]
b = a[:]
b.insert(2, 3)
가장 성능 효율적인 접근 방식
목록의 슬라이스 인덱싱을 사용하여 요소를 삽입할 수도 있습니다.예:
>>> 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]
슬라이스 인덱싱에 대한 자세한 내용은 다음을 참조하십시오.슬라이스 표기법 이해.
참고: Python 3.x에서는 슬라이스 인덱싱과 슬라이스 인덱싱 간의 성능 차이가 상당히 줄어들고 둘 다 거의 동일합니다.그러나 Python 2.x에서는 이러한 차이가 상당히 두드러집니다.이 답변의 뒷부분에서 성능 비교를 공유했습니다.
목록 이해를 사용하는 대안(그러나 성능 측면에서는 매우 느림):
대안으로 목록 이해를 사용하여 달성할 수도 있습니다. (하지만 이런 식으로 하지 마십시오.) 설명을 위한 것입니다) 위한 것입니다.
>>> 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]
모든 솔루션의 성능 비교
다음은 Python 3.9.1 및 Python 2.7.16의 1000개 요소 목록과 모든 답변을 비교한 것입니다.답변은 두 Python 버전의 성능 순서대로 나열됩니다.
파이썬 3.9.1
슬라이스 삽입을 이용한 내 대답 - 가장 빠른 (루프당 2.25µsec)
python3 -m timeit -s "a = list(range(1000))" "b = a[:]; b[500:500] = [3]" 100000 loops, best of 5: 2.25 µsec per loop가장 많은 표를 얻은 Rushy Panchal의 대답은 다음과 같습니다.
list.insert(...)초(루프당 2.33µsec)python3 -m timeit -s "a = list(range(1000))" "b = a[:]; b.insert(500, 3)" 100000 loops, best of 5: 2.33 µsec per loop조각난 목록 병합에 기반한 ATOZTOA 수락의락수된 답변 - 세 번째(루프당 5.01µsec)
python3 -m timeit -s "a = list(range(1000))" "b = a[:500] + [3] + a[500:]" 50000 loops, best of 5: 5.01 µsec per loop목록 이해력이 있는 내 대답과
enumerate네 번째(루프당 135µsec로 매우 느림)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, )) ]" 2000 loops, best of 5: 135 µsec per loop
파이썬 2.7.16
슬라이스 삽입을 이용한 내 대답 - 가장 빠른 (루프당 2.09µsec)
python -m timeit -s "a = list(range(1000))" "b = a[:]; b[500:500] = [3]" 100000 loops, best of 3: 2.09 µsec per loop가장 많은 표를 얻은 Rushy Panchal의 대답은 다음과 같습니다.
list.insert(...)초(루프당 2.36µsec)python -m timeit -s "a = list(range(1000))" "b = a[:]; b.insert(500, 3)" 100000 loops, best of 3: 2.36 µsec per loop슬라이스 리스트 병합을 기반으로 한 ATOZTOA 수락의락수된 답변 - 세 번째(루프당 4.44µsec)
python -m timeit -s "a = list(range(1000))" "b = a[:500] + [3] + a[500:]" 100000 loops, best of 3: 4.44 µsec per loop목록 이해력이 있는 내 대답과
enumerate네 번째(루프당 103µsec로 매우 느림)python -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: 103 µsec per loop
내가 가진 가장 짧은 것:b = a[:2] + [3] + a[2:]
>>>
>>> a = [1, 2, 4]
>>> print a
[1, 2, 4]
>>> b = a[:2] + [3] + a[2:]
>>> print a
[1, 2, 4]
>>> print b
[1, 2, 3, 4]
가장 깨끗한 방법은 목록을 복사한 다음 복사본에 개체를 삽입하는 것입니다.에서는 Python 3을 통해 이 작업을 할 수 .list.copy:
new = old.copy()
new.insert(index, value)
복사는 Python 2를 통해 할 수 .new = old[:](이것은 Python 3에서도 작동합니다.)
성능 면에서 제안된 다른 방법과 차이가 없습니다.
$ python --version
Python 3.8.1
$ python -m timeit -s "a = list(range(1000))" "b = a.copy(); b.insert(500, 3)"
100000 loops, best of 5: 2.84 µsec per loop
$ python -m timeit -s "a = list(range(1000))" "b = a.copy(); b[500:500] = (3,)"
100000 loops, best of 5: 2.76 µsec per loop
다음은 특정 인덱스 연결 목록에 있는 단일 항목을 다른 목록과 함께 추가하는 방법입니다.
>>> expences = [2200, 2350, 2600, 2130, 2190]
>>> expences.append(1980)
>>> expences
[2200, 2350, 2600, 2130, 2190, 1980]
>>> expences.insert(1, 1200)
>>> expences
[2200, 1200, 2350, 2600, 2130, 2190, 1980]
>>> newElm = [2550, 2123, 2430]
>>> expences.extend(newElm)
>>> expences
[2200, 1200, 2350, 2600, 2130, 2190, 1980, 2550, 2123, 2430]
>>>
Python list insert() 메서드를 사용합니다.용도:
# 구문
insert() 메서드의 구문 -
list.insert(index, obj)
#파라미터
- 인덱스 - 개체 obj를 삽입해야 하는 인덱스입니다.
- obj - 지정된 목록에 삽입할 개체입니다.
#Return Value 이 메서드는 값을 반환하지 않지만 지정된 인덱스에 지정된 요소를 삽입합니다.
예:
a = [1,2,4,5]
a.insert(2,3)
print(a)
온다아를 반환합니다.[1, 2, 3, 4, 5]
언급URL : https://stackoverflow.com/questions/14895599/insert-an-element-at-a-specific-index-in-a-list-and-return-the-updated-list
'source' 카테고리의 다른 글
| Xcode 프로세스 시작 실패:보안. (0) | 2023.05.28 |
|---|---|
| 가장 유용한 속성 (0) | 2023.05.28 |
| nodejs http.get 응답에서 본문은 어디에 있습니까? (0) | 2023.05.28 |
| 목록에 Python 문자열 형식 사용 (0) | 2023.05.28 |
| VB.NET에서 어레이를 인라인으로 선언하는 방법 (0) | 2023.05.28 |