gpt4 book ai didi

python - 每当列表中有零时,创建一个新的前导字符子列表,不包括零

转载 作者:太空宇宙 更新时间:2023-11-03 13:20:00 26 4
gpt4 key购买 nike

我必须操作的列表更长,但例如让我们使用一个列表,它是 [3,5,0,6,8,9,7,0,1,0]。零之间的元素数量不是常数。我想将零前面的术语分组到子列表中。我正在寻找的是 [[3,5],[6,8,9,7],[1]];零分隔术语但不包含在子列表中。

我不认为我可以使用 split 函数,因为我正在对元素进行分组,所以我一直在尝试找出一种以这种方式分组的方法。

最佳答案

>>> from itertools import groupby
>>> L = [3,5,0,6,8,9,7,0,1,0]
>>> [list(g) for k, g in groupby(L, key=bool) if k]
[[3, 5], [6, 8, 9, 7], [1]]

key=bool 在这种情况下有效,因为 0 被认为是 empty 但正如@AshwiniChaudhary 指出的那样,您将必须使用自定义 key 函数,当你不按 0 分割时,例如。按 2

拆分
key=lambda x: x != 2

解释:

首先我将说明是如何工作的:

>>> bool(3), bool(5)
(True, True)
>>> bool(0)
False

如您所见,它会在 0 上返回 TrueFalseFalse >True 在任何其他方面。 (实际上 bool('')bool([]) 也返回 False,以及任何其他空的内置对象,但我们只是考虑这里的数字)

因此 groupby 只是对 key 函数的结果进行分组,因此将 01 分组

>>> [(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>), (False, <itertools._grouper object at 0xb6fc4c2c>), (True, <itertools._grouper object at 0xb6fc428c>), (False, <itertools._grouper object at 0xb6fc476c>)]

但是正如您所见,组是一个奇怪的对象,一个 itertools._grouper 对象。为什么它不只返回一个列表? itertools 正在惰性 对项目进行分组,这样效率更高,但这留给我们的工作是将组中的所有项目消耗到一个列表.

>>> [(key, list(group)) for key, group in groupby(L, key=bool)]
[(True, [3, 5]), (False, [0]), (True, [6, 8, 9, 7]), (False, [0]), (True, [1]), (False, [0])]

但是我们不需要 key,我们只需要检查它是否为 True 并只返回满足这个谓词的项目,这导致我的回答在开始。

>>> [list(group) for key, group in groupby(L, key=bool) if key]
[[3, 5], [6, 8, 9, 7], [1]]

关于python - 每当列表中有零时,创建一个新的前导字符子列表,不包括零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16878886/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com