问题描述
list = [['100','88','',''],['100','68','58'],['102','28','2',['104','11',['110',['202','14','37429','']]
需要在第一个索引值上合并子列表。
output = [['100',88,28,11,2,14,'']]
解决方法
使用任何其他名称代替列表。
使用 itertools's groupby
和 groupby 1st 元素,然后将它们合并在一起,但这会给您列表列表,因此您需要使用 itertools chain
将它们展平。
注意:我还删除了空字符串。您可以尝试根据空字符串的需要修改代码,也可以稍后附加它们,使每个列表大小为 4。
from itertools import groupby
import itertools
li = [['100','88','',''],['100','68','58'],['102','28','2',['104','11',['110',['202','14','37429','']]
tuple_list = list(map(tuple,li))
output_list = [[idx]+list(itertools.chain.from_iterable(list(filter(None,i[1:])) for i in e)) for idx,e in groupby(tuple_list,lambda x: x[0])]
输出列表:
[['100','2'],'37429']]
如果你还想要空字符串:
output_list = [([idx]+list(itertools.chain.from_iterable(list(filter(None,i[1:])) for i in e))+['']*4)[:4] for idx,lambda x: x[0])]
[['100','']]
,
更基本的方法是进行两个嵌套循环,如果第一个索引匹配,则写一个条件,将它们移动到一个新列表中。 您可以尝试将它们转换为 numpy 数组,这将使它们成为二维数组,然后您可以更轻松地进行比较