Adding an element from a list before and after the delimiter of another list

Question:

There are 2 lists and my goal is to add the element from one list before and after the delimiters of another list.
Below is the example:

ListA = ["A", "B"]
ListB = [[1, 2, 3, 4], [5, 6, 7, 8]]

Expected Output:

[[1, 'A', 2, 'A', 3, 'A', 4, 'A'], [5, 'B', 6, 'B', 7, 'B', 8, 'B']]

What I’ve done so far:

for x, y in zip(ListB, ListA):
    x.append(y)

Output: ListB

[[1, 2, 3, 4, 'A'], [5, 6, 7, 8, 'B']]
Asked By: Tanwir Khan

||

Answers:

Your code appends ‘A’ once to the whole [1,2,3,4] list.
This should work:

ListA = ['A','B']
ListB = [[1,2,3,4],[5,6,7,8]]

for x, y in zip(ListB, ListA):
    for i in range(len(x)):
        x.insert(2*i+1,y)

print(ListB)
# [[1, 'A', 2, 'A', 3, 'A', 4, 'A'], [5, 'B', 6, 'B', 7, 'B', 8, 'B']]

A variant to produce something closest to your 2nd demand:

ListA = ['A','B','C'] 
ListB = [[1,5],[2,10],[11,15]]
for x, y in zip(ListB, ListA):
    for i in range(len(x)):
        x[i] = y + ' ' + str(x[i])

print(ListB)
# [['A 1', 'A 5'], ['B 2', 'B 10'], ['C 11', 'C 15']]
Answered By: Swifty

zip the two lists together, and then build new lists out of pairs of all the b items with the single a item:

>>> ListA = ['A','B']
>>> ListB = [[1,2,3,4],[5,6,7,8]]
>>> [[j for t in ((i, a) for i in b) for j in t] for a, b in zip(ListA, ListB)]
[[1, 'A', 2, 'A', 3, 'A', 4, 'A'], [5, 'B', 6, 'B', 7, 'B', 8, 'B']]
Answered By: Samwise

Here is another approach to this:

from itertools import repeat

ListA = ["A", "B"]
ListB = [[1, 2, 3, 4], [5, 6, 7, 8]]

result = []
for x, y in zip(ListA, ListB):
    nested_list = []
    for item in zip(y, repeat(x)):
        nested_list.extend(item)
    result.append(nested_list)

print(result)

This can be written using a bit more complex list comp(Also this modifies ListB in-place instead of creating a new one):

from itertools import repeat

ListA = ["A", "B"]
ListB = [[1, 2, 3, 4], [5, 6, 7, 8]]

ListB[:] = [
    [i for item in zip(y, repeat(x)) for i in item] for x, y in zip(ListA, ListB)
]
print(ListB)
Answered By: S.B
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.