加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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]]

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读