gpt4 book ai didi

python - 在列表中查找递增数字组(具有不同的增量)

转载 作者:行者123 更新时间:2023-11-28 21:39:16 24 4
gpt4 key购买 nike

我有一个列表,其中包含具有不同增量的递增数字的“组”。这是一个例子:

l = [0, 1, 5, 8, 10, 20, 30, 40, 45, 48, 77, 100, 200, 300, 400]

我想回来:

[[0], [1], [5], [8], [10, 20, 30, 40], [45], [48], [77], [100, 200, 300, 400]]

解释:0、1、5、8 不遵循固定的增量(+1、+4、+3),而 [10、20、30、40] 都有固定的 +10 增量。


我知道如何使用 for 循环和 curr_groupcurr_delta 等变量来完成此操作,但我想避免这种情况。

使用 pandas,我能够得到这个:

import pandas as pd

df = pd.DataFrame({'col': [0, 1, 5, 8, 10, 20, 30, 40, 45, 48, 77, 100, 200, 300, 400]})
df['shift_diff'] = (df.diff() != df.diff().shift(-1)).astype('int')
df['group'] = df.shift_diff.cumsum()
print list(df.groupby('group').col.apply(list))

哪些输出

[[0], [1], [5], [8], [10, 20, 30], [40], [45], [48], [77], [100, 200, 300], [400]]

非常接近,但所有长度 > 1 的组([10, 20, 30][100, 200, 300])都缺少最后一个元素.

一个简短而优雅的解决方案将不胜感激!谢谢

最佳答案

这是你想要的吗?

df['group'] = (~((df-df.shift()).diff().eq(0)|(df-df.shift(-1)).diff().eq(0))).cumsum()
print(list(df.groupby('group').col.apply(list)))
[[0], [1], [5], [8], [10, 20, 30, 40], [45], [48], [77], [100, 200, 300, 400]]

关于python - 在列表中查找递增数字组(具有不同的增量),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47087099/

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