Extend list with another list in specific index?

Question:

In python we can add lists to each other with the extend() method but it adds the second list at the end of the first list.

lst1 = [1, 4, 5]
lst2 = [2, 3]

lst1.extend(lst2)

Output:
[1, 4, 5, 2, 3]

How would I add the second list to be apart of the 1st element? Such that the result is this;

[1, 2, 3, 4, 5 ]

I’ve tried using lst1.insert(1, *lst2) and got an error;

TypeError: insert expected 2 arguments, got 3

Answers:

You can solve your problem in two steps:

  • Insert the list into the other list
  • Flatten the result

Code:

from collections.abc import Iterable

# https://stackoverflow.com/questions/2158395/flatten-an-irregular-arbitrarily-nested-list-of-lists
def flatten(xs):
    for x in xs:
        if isinstance(x, Iterable) and not isinstance(x, (str, bytes)):
            yield from flatten(x)
        else:
            yield x

xs = [1,4,5]
ys = [2,3]
xs.insert(1, ys)
print("intermediate result", xs)
xs = flatten(xs)
print(xs)
Answered By: Caridorc

For those who don’t like reading comments:

lst1 = [1, 4, 5]
lst2 = [2, 3]

lst1[1:1] = lst2
print(lst1)

Output:

[1, 2, 3, 4, 5]
Answered By: Jamiu Shaibu

If your only goal is to get the list sorted correctly, then you use .extend() and .sort() afterwards.

Answered By: Mou

@Jamiu has the correct solution if the list are always sorted.

if lists are not in order then

lst1 = sorted(lst1+lst2)
Answered By: Hackaholic
Categories: questions Tags: , , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.