This is an alternative method using itertools.
The idea is to flatten the list of lists, add your data, and then again split by the information that you saved in the number of lists on each line.
from itertools import chain, accumulate
import pandas as pd
d = {'A': [1,2,3,4], 'B': [[[1,2],[2,3]],[[3,4],[2,5]],[[5,6],[5,6],[5,6]],[[7,8]]]}
df = pd.DataFrame(data=d)
C = [1,2,3,4,5,6,7,8]
acc = [0] + list(accumulate(map(len, B)))
lst = [j+[C[i]] for i, j in enumerate(chain.from_iterable(df['B']))]
df['B'] = [lst[x:y] for x, y in zip(acc, acc[1:])]
. : B , . .
A B
0 1 [[1, 2, 1], [2, 3, 2]]
1 2 [[3, 4, 3], [2, 5, 4]]
2 3 [[5, 6, 5], [5, 6, 6], [5, 6, 7]]
3 4 [[7, 8, 8]]