python – 每次列表中的零为零时创建一个新的前面字符子列表,不
发布时间:2020-12-20 11:27:48 所属栏目:Python 来源:网络整理
导读:我必须操作的列表更长,但是例如让我们使用[3,5,6,8,9,7,1,0]列表.零之间的元素数量不是恒定的.我想将零之前的术语分组到子列表中.我正在寻找的是[[3,5],[6,7],[1]];零分割条款但不包括在子列表中. 我不认为我可以使用split函数,因为我正在对元素进行分组,所
我必须操作的列表更长,但是例如让我们使用[3,5,6,8,9,7,1,0]列表.零之间的元素数量不是恒定的.我想将零之前的术语分组到子列表中.我正在寻找的是[[3,5],[6,7],[1]];零分割条款但不包括在子列表中.
我不认为我可以使用split函数,因为我正在对元素进行分组,所以我一直试图找出一种以这种方式分组的方法. 解决方法>>> from itertools import groupby >>> L = [3,0] >>> [list(g) for k,g in groupby(L,key=bool) if k] [[3,[1]] key = bool在这种情况下有效,因为0被认为是空的,但正如@AshwiniChaudhary所指出的那样,当你没有被0分割时你将不得不使用自定义键功能,例如.分裂为2 key=lambda x: x != 2 说明: 首先,我将说明密钥的工作原理: >>> bool(3),bool(5) (True,True) >>> bool(0) False 如您所见,它将返回True或False,False返回0,True返回其他任何内容. (实际上bool(”)和bool([])也返回False,以及任何其他空的内置对象,但我们只考虑数字) 因此groupby只是将关键函数的结果分组,因此分组为0和1. >>> [(key,group) for key,group in groupby(L,key=bool)] [(True,<itertools._grouper object at 0xb6fc1dac>),(False,<itertools._grouper object at 0xb6fc432c>),(True,<itertools._grouper object at 0xb6fc422c>),<itertools._grouper object at 0xb6fc4c2c>),<itertools._grouper object at 0xb6fc428c>),<itertools._grouper object at 0xb6fc476c>)] 但是你可以看到这个组是一个奇怪的对象,一个itertools._grouper对象.为什么不返回列表呢? itertools正在懒惰地对项目进行分组,效率要高得多,但这使得我们可以将组中的所有项目都使用到列表中. >>> [(key,list(group)) for key,[3,5]),[0]),7]),[1]),[0])] 但是我们不需要密钥,我们只需要检查它是否为True并且只返回满足该谓词的项目,这会在开始时得到我的答案. >>> [list(group) for key,key=bool) if key] [[3,[1]] (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |