Может быть, проще использовать словарь, чтобы сгруппировать подсписки и отформатировать их позже.
A = [(1, (2, 3, 4, 5)), (1, (20, 33, 41, 15)), (2, (12, 5, 34, 10))]
memo = {}
for (page, bbox) in A:
if page not in memo:
memo[page] = [bbox]
else:
memo[page].append(bbox)
# memo => {1: [(2, 3, 4, 5), (20, 33, 41, 15)], 2: [(12, 5, 34, 10)]}
result = []
for page, bbox_list in memo.items():
page_list = []
for bbox in bbox_list:
page_list.append((page, bbox))
result.append(page_list)
# result => [[(1, (2, 3, 4, 5)), (1, (20, 33, 41, 15))], [(2, (12, 5, 34, 10))]]