gpt4 book ai didi

python - 如何拆分 Python 列表并按升序创建新列表?

转载 作者:太空宇宙 更新时间:2023-11-03 12:15:49 24 4
gpt4 key购买 nike

在 Python 中如果有

[1,2,3,4,1,2,3,1,2,1] 

列表,我想像这样缩小大小时拆分列表

[1,2,3,4], [1,2,3], [1,2], [1]

如何编码?

最佳答案

您可以使用 Pandas 分三行执行此操作:

import pandas as pd
s = pd.Series([1,2,3,4,1,2,3,1,2,1])
s.groupby(s.diff().lt(0).cumsum()).apply(list).tolist()

输出:

[[1, 2, 3, 4], [1, 2, 3], [1, 2], [1]]

详细说明它是如何工作的:

首先从列表中创建一个 pandas 系列,然后使用 pd.Series 中的 diff 方法获取与之前值的差异:

s.diff()

0 NaN
1 1.0
2 1.0
3 1.0
4 -3.0
5 1.0
6 1.0
7 -2.0
8 1.0
9 -1.0
dtype: float64

负值表示新“子”列表的开始。因此,我们使用 lt(0) 来标记那些新的“子”列表应该开始的记录。

s.diff().lt(0)

0 False
1 False
2 False
3 False
4 True
5 False
6 False
7 True
8 False
9 True
dtype: bool

接下来,我们将使用 cumsum 创建分组术语。 cumsum 只会在 True 时递增,因此所有相邻的 false 都获得相同的值,然后 True 递增,下一组 false 获得新值,直到下一个 True。

s.diff().lt(0).cumsum()

0 0
1 0
2 0
3 0
4 1
5 1
6 1
7 2
8 2
9 3
dtype: int32

现在,我们可以使用 groupbyapply 来创建一个以这些子列表为行的新系列。我们根据上面新创建的分组术语进行分组,并将 python list 应用于该组中的那些值,从而创建“子”列表。

s.groupby(s.diff().lt(0).cumsum()).apply(list)

0 [1, 2, 3, 4]
1 [1, 2, 3]
2 [1, 2]
3 [1]
dtype: object

最后,我们对系列应用 tolist 方法以将系列作为列表返回。

s.groupby(s.diff().lt(0).cumsum()).apply(list).tolist()

最终输出:

[[1, 2, 3, 4], [1, 2, 3], [1, 2], [1]]

关于python - 如何拆分 Python 列表并按升序创建新列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47447989/

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