微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如果第一个索引元素匹配

如何解决如果第一个索引元素匹配

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 数组,这将使它们成为二维数组,然后您可以更轻松地进行比较

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。