如何连接等分块的子列表列表

How to concatenate a list of sublists equally chunked

我有一个列表,其中包含两种不同类型项目的子列表(例如,catsdogs)。我还有一个函数 chunk(list, n_sublists),它将 list 拆分为大小相等的 n_sublists

然后,我想创建一个合并每个类型的分块列表的最终列表。一个例子:

cats_and_dogs = [ [dog1, dog2, dog3, dog4], [cat1, cat2] ]

splitted_chunks = [[[dog1, dog2], 
                    [dog3, dog4]],
                  [[cat1], 
                  [cat2]]] 

final_merged_sublists = [ [dog1, dog2, cat1], [dog3, dog4, cat2] ]

我希望这个例子能说明问题。但是,如果需要,我可以提供更多解释。

提前致谢。

你可以在 zip 上做一个循环:

list(x+y for x,y in zip(chunk(dogs,2), chunk(cats,2))

输出:

[['dog1', 'dog2', 'cat1'], ['dog3', 'dog4', 'cat2']]

Update:一般情况下,使用reduce

from functools import reduce

splitted_chunks = map(lambda x: chunk(x,2), cats_and_dogs)
list(reduce(lambda x,y: x+y, z) for z in zip(*splitted_chunks) )

您可以使用 zipitertools.chain:

splitted_chunks = [[['dog1', 'dog2'], 
                    ['dog3', 'dog4']],
                  [['cat1'], 
                   ['cat2']]] 

from itertools import chain
final_merged_sublists = [list(chain.from_iterable(x)) for x in zip(*splitted_chunks)]

输出:

[['dog1', 'dog2', 'cat1'], ['dog3', 'dog4', 'cat2']]

注意。要在任意大小的原始列表的所有子列表上应用 chunk,请使用 map