41

In JavaScript, I can use splice to insert an array of multiple elements in to an array: myArray.splice(insertIndex, removeNElements, ...insertThese).

But I can't seem to find a way to do something similar in Python without having concat lists. Is there such a way? (There is already a Q&A about inserting single items, rather than multiple.)

For example myList = [1, 2, 3] and I want to insert otherList = [4, 5, 6] by calling myList.someMethod(1, otherList) to get [1, 4, 5, 6, 2, 3]

natevw
  • 15,097
  • 8
  • 60
  • 83
TheRealFakeNews
  • 6,497
  • 15
  • 63
  • 96

4 Answers4

96

To extend a list, you just use list.extend. To insert elements from any iterable at an index, you can use slice assignment...

>>> a = list(range(10))
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a[5:5] = range(10, 13)
>>> a
[0, 1, 2, 3, 4, 10, 11, 12, 5, 6, 7, 8, 9]
wjandrea
  • 23,210
  • 7
  • 49
  • 68
mgilson
  • 283,004
  • 58
  • 591
  • 667
  • This does the job, but doesn’t answer the actual question directly. The answer should have been something like `myList[1:1] = otherList`. – Manngo Mar 26 '22 at 03:10
5

Python lists do not have such a method. Here is helper function that takes two lists and places the second list into the first list at the specified position:

def insert_position(position, list1, list2):
    return list1[:position] + list2 + list1[position:]
RFV
  • 751
  • 6
  • 21
0

The following accomplishes this while avoiding creation of a new list. However I still prefer @RFV5s method.

def insert_to_list(original_list, new_list, index):
    
    tmp_list = []
    
    # Remove everything following the insertion point
    while len(original_list) > index:
        tmp_list.append(original_list.pop())
    
    # Insert the new values
    original_list.extend(new_list)
    
    # Reattach the removed values
    original_list.extend(tmp_list[::-1])
    
    return original_list

Note that it's necessary to reverse the order of tmp_list because pop() gives up the values from original_list backwards from the end.

corvus
  • 482
  • 6
  • 18
-1

use listname.extend([val1,val2,val,etc])

  • Thank you for contributing an answer. Would you kindly edit your answer to to include an explanation of your code? That will help future readers better understand what is going on, and especially those members of the community who are new to the language and struggling to understand the concepts. – sta Feb 03 '21 at 10:38
  • Same solution as in Corvus' answer. – Eric Aya Feb 03 '21 at 12:23