Cách tiếp cận Hiệu quả nhất
Bạn cũng có thể chèn phần tử bằng cách sử dụng lập chỉ mục lát trong danh sách. Ví dụ:
>>> 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 original list
>>> b[insert_at:insert_at] = [3] # insert "3" within "b"
>>> b
[1, 2, 3, 4]
Để chèn nhiều phần tử với nhau tại một chỉ mục nhất định , tất cả những gì bạn cần làm là sử dụng một list
trong nhiều phần tử mà bạn muốn chèn. Ví dụ:
>>> 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]
Thay thế bằng cách sử dụng Tính năng hiểu danh sách (nhưng rất chậm về mặt hiệu suất) :
Là một thay thế, nó có thể đạt được bằng danh sách hiểu với enumerate
quá. (Nhưng xin đừng làm theo cách này. Nó chỉ mang tính chất minh họa) :
>>> 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]
So sánh hiệu suất của tất cả các giải pháp
Dưới đây là timeit
so sánh tất cả các câu trả lời với danh sách 1000 phần tử cho Python 3.4.5:
Câu trả lời của tôi bằng cách sử dụng chèn cắt lát - Nhanh nhất (3.08 usec mỗi vòng lặp)
mquadri$ python3 -m timeit -s "a = list(range(1000))" "b = a[:]; b[500:500] = [3]"
100000 loops, best of 3: 3.08 usec per loop
Câu trả lời được chấp nhận của ATOzTOA dựa trên việc hợp nhất các danh sách được chia nhỏ - Thứ hai (6,71 usec mỗi vòng lặp)
mquadri$ python3 -m timeit -s "a = list(range(1000))" "b = a[:500] + [3] + a[500:]"
100000 loops, best of 3: 6.71 usec per loop
Câu trả lời của Rushy Panchal với nhiều phiếu bầu nhất bằng cách sử dụnglist.insert(...)
- Thứ ba (26,5 usec mỗi vòng lặp)
python3 -m timeit -s "a = list(range(1000))" "b = a[:]; b.insert(500, 3)"
10000 loops, best of 3: 26.5 usec per loop
Câu trả lời của tôi với Khả năng hiểu danh sách vàenumerate
- Thứ tư (rất chậm với 168 usec mỗi vòng lặp)
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 usec per loop
b = a[:].insert(2,3)
có vẻ khá ngắn, không ảnh hưởng đến danh sách ban đầu và khá mô tả.