我有一個串列,其中包含兩種不同型別專案(例如,cats和dogs)的子串列。我還有一個函式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] ]
我希望這個例子能說清楚。但是,如果需要,我可以提供更多解釋。
提前致謝。
uj5u.com熱心網友回復:
您可以在 zip 上回圈:
list(x y for x,y in zip(chunk(dogs,2), chunk(cats,2))
輸出:
[['dog1', 'dog2', 'cat1'], ['dog3', 'dog4', 'cat2']]
更新:一般來說,使用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) )
uj5u.com熱心網友回復:
您可以使用zip和itertools.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
uj5u.com熱心網友回復:
只是為了好玩,您可以壓縮串列并展平子串列的每個子串列:
def flatten_list(list1):
out = []
inside = list1
while inside:
x = inside.pop(0)
if isinstance(x, list):
inside[0:0] = x
else:
out.append(x)
return out
out = [flatten_list(list(x)) for x in zip(*splitted_chunks)]
輸出:
[['dog1', 'dog2', 'cat1'], ['dog3', 'dog4', 'cat2']]
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/378061.html
下一篇:WSL系統安裝與使用
