我有此列表列表:
cont_det = [['TASU 117000 0', "TGHU 759933 - 0", 'CSQU3054383', 'BMOU 126 780-0', "HALU 2014 13 3"], ['40HS'], ['Ha2ardous Materials', 'Arm5 Maehinery']]
实际上cont_det
是一个巨大的列表,带有许多子列表,每个子列表的长度不规则。这只是一个示范案例。我想得到以下输出:
[['TASU 117000 0', '40HS', 'Ha2ardous Materials'],
['TGHU 759933 - 0', '40HS', 'Arm5 Maehinery'],
['CSQU3054383', '40HS', 'Ha2ardous Materials'],
['BMOU 126 780-0', '40HS', 'Ha2ardous Materials'],
['HALU 2014 13 3', '40HS', 'Ha2ardous Materials']]
此逻辑后面是zip_longest
列表列表,但是如果有任何子列表的长度小于子列表所有长度的最大值(此处第一个子列表为5),然后代替默认fillvalue=None
来获取该子列表的第一项-如第二个子列表的情况所示,所有反射的填充值均相同,而对于第三个子列表,所有后三个填充值均由第一个值填充。] >
我得到的结果与此代码:
from itertools import zip_longest as zilo from more_itertools import padded as pad max_ = len(max(cont_det, key=len)) for i, cont_row in enumerate(cont_det): if len(cont_det)!=max_: cont_det[i] = list(pad(cont_row, cont_row[0], max_)) cont_det = list(map(list, list(zilo(*cont_det))))
这给了我预期的结果。相反,如果我做了
list(zilo(*cont_det, fillvalue=''))
,我会得到这个:
[('TASU 117000 0', '40HS', 'Ha2ardous Materials'), ('TGHU 759933 - 0', '', 'Arm5 Maehinery'), ('CSQU3054383', '', ''), ('BMOU 126 780-0', '', ''), ('HALU 2014 13 3', '', '')]
[
fillvalue
函数的参数zip_longest
是否还有其他过程(例如映射任何函数或类似的东西),这样我就不必遍历列表来填充每个子列表的长度为最长的子列表,然后可以只用zip_longest
行完成此操作?
我有此列表清单:cont_det = [['TASU 117000 0',“ TGHU 759933-0”,'CSQU3054383','BMOU 126780-0',“ HALU 2014 13 3”],['40HS' ],['危险材料','Arm5 Maehinery']]实际上...
看起来像某种“矩阵旋转”。