Python 根据浮动条目的大小拆分列表

Python 根据浮动条目的大小拆分列表,python,Python,我有一个浮动列表,其中每个顺序索引的大小可以不同。 i、 e 我试图做的是根据索引中浮动的大小分割列表。特别是,如果一个指数的浮动小于前一个指数的浮动,则将这些指数组合在一起,以返回小于前一个指数的指数总数 例如,如果我们从第一个索引开始,则值为167.233。因为下一个索引95.6242的值比前一个索引的值小,所以我想将这两个索引组合在一起,以返回它们的长度,即2 第三个指数比第二个指数大,因此这成为新的“基准”。由于以下索引小于第三个索引,因此返回长度2。 第五个指数是下一个“基准”,其余指

我有一个浮动列表,其中每个顺序索引的大小可以不同。 i、 e

我试图做的是根据索引中浮动的大小分割列表。特别是,如果一个指数的浮动小于前一个指数的浮动,则将这些指数组合在一起,以返回小于前一个指数的指数总数

例如,如果我们从第一个索引开始,则值为167.233。因为下一个索引95.6242的值比前一个索引的值小,所以我想将这两个索引组合在一起,以返回它们的长度,即2

第三个指数比第二个指数大,因此这成为新的“基准”。由于以下索引小于第三个索引,因此返回长度2。 第五个指数是下一个“基准”,其余指数的浮动减少,因此返回这些指数的长度3

我希望返回的方式是这些索引的长度列表,即[2,2,3]


提前道歉如果这让人困惑,很难用语言解释。

使用
numpy.diff
numpy.where
为了找到项目没有排序的索引,然后使用
numpy.split()
在该索引中拆分数组,最后使用
map()
要查找拆分数组的长度,请执行以下操作:

In [19]: import numpy as np
In [20]: float_list = np.array([167.233, 95.6242, 181.367, 20.6354, 147.505, 41.9396, 20.3126])
# In [22]: np.split(float_list, np.where(np.diff(float_list) > 0)[0] + 1)
# Out[22]: 
# [array([ 167.233 ,   95.6242]),
#  array([ 181.367 ,   20.6354]),
#  array([ 147.505 ,   41.9396,   20.3126])]

In [23]: map(len, np.split(float_list, np.where(np.diff(float_list) > 0)[0] + 1))
Out[23]: [2, 2, 3]

使用
numpy.diff
numpy.where
查找项目未排序的索引,然后使用
numpy.split()
在该索引中拆分数组,最后使用
map()
查找拆分数组的长度:

In [19]: import numpy as np
In [20]: float_list = np.array([167.233, 95.6242, 181.367, 20.6354, 147.505, 41.9396, 20.3126])
# In [22]: np.split(float_list, np.where(np.diff(float_list) > 0)[0] + 1)
# Out[22]: 
# [array([ 167.233 ,   95.6242]),
#  array([ 181.367 ,   20.6354]),
#  array([ 147.505 ,   41.9396,   20.3126])]

In [23]: map(len, np.split(float_list, np.where(np.diff(float_list) > 0)[0] + 1))
Out[23]: [2, 2, 3]

您也可以按以下方式执行此操作:

def group_list(l):
    if not l:
        return []

    result = [0]
    prev = l[0] + .1
    for el in l:
        if el < prev:
            result[-1] += 1
        else:
            result.append(1)
        prev = el

    return result

>>> group_list([167.233, 95.6242, 181.367, 20.6354, 147.505, 41.9396, 20.3126])
[2, 2, 3]
>>> group_list([167.233, 95.6242, 1.367, 20.6354, 147.505, 41.9396, 20.3126])
[3, 1, 3]
>>> group_list([167.233, 95.6242, 1.367, 20.6354, 147.505, 41.9396, 70.3126])
[3, 1, 2, 1]
>>> group_list([-167.233, 95.6242, 1.367, 20.6354, 147.505, 41.9396, 70.3126])
[1, 2, 1, 2, 1]
def组列表(l):
如果不是l:
返回[]
结果=[0]
prev=l[0]+.1
对于l中的el:
如果el>>组列表([167.233,95.6242,181.367,20.6354,147.505,41.9396,20.3126])
[2, 2, 3]
>>>组列表([167.233,95.6242,1.367,20.6354,147.505,41.9396,20.3126])
[3, 1, 3]
>>>组列表([167.233,95.6242,1.367,20.6354,147.505,41.9396,70.3126])
[3, 1, 2, 1]
>>>组列表([-167.233,95.6242,1.367,20.6354,147.505,41.9396,70.3126])
[1, 2, 1, 2, 1]

您也可以按如下方式执行:

def group_list(l):
    if not l:
        return []

    result = [0]
    prev = l[0] + .1
    for el in l:
        if el < prev:
            result[-1] += 1
        else:
            result.append(1)
        prev = el

    return result

>>> group_list([167.233, 95.6242, 181.367, 20.6354, 147.505, 41.9396, 20.3126])
[2, 2, 3]
>>> group_list([167.233, 95.6242, 1.367, 20.6354, 147.505, 41.9396, 20.3126])
[3, 1, 3]
>>> group_list([167.233, 95.6242, 1.367, 20.6354, 147.505, 41.9396, 70.3126])
[3, 1, 2, 1]
>>> group_list([-167.233, 95.6242, 1.367, 20.6354, 147.505, 41.9396, 70.3126])
[1, 2, 1, 2, 1]
def组列表(l):
如果不是l:
返回[]
结果=[0]
prev=l[0]+.1
对于l中的el:
如果el>>组列表([167.233,95.6242,181.367,20.6354,147.505,41.9396,20.3126])
[2, 2, 3]
>>>组列表([167.233,95.6242,1.367,20.6354,147.505,41.9396,20.3126])
[3, 1, 3]
>>>组列表([167.233,95.6242,1.367,20.6354,147.505,41.9396,70.3126])
[3, 1, 2, 1]
>>>组列表([-167.233,95.6242,1.367,20.6354,147.505,41.9396,70.3126])
[1, 2, 1, 2, 1]

您似乎希望获得一个列表,其中包含浮动列表中递减/非递增范围的大小

def size_of_decreasing_ranges(float_list):
    if len(float_list) == 0:
        return []
    result = []
    count = 1
    for index, ele in enumerate(float_list):
        if index > 0:
            if float_list[index] > float_list[index-1]:
                result.append(count)
                count = 1
            else:
                count += 1
    result.append(count)
    return result

似乎您希望获得一个列表,其中包含浮动列表中递减/非递增范围的大小

def size_of_decreasing_ranges(float_list):
    if len(float_list) == 0:
        return []
    result = []
    count = 1
    for index, ele in enumerate(float_list):
        if index > 0:
            if float_list[index] > float_list[index-1]:
                result.append(count)
                count = 1
            else:
                count += 1
    result.append(count)
    return result

好的,那么您试图做什么呢?所以不是HW解决方案站点:)!请发布您的尝试,然后人们会帮助您@user3227150这个问题很难理解。您对工作索引和索引的使用似乎与列表中的值相混淆。您能至少提出您喜欢的输出是什么吗?您希望返回什么
[167.233、168.2、181.367、20.6354]
?好的,那么您尝试了什么?HW解决方案站点也不是这样:)!请发布您的尝试,然后人们会帮助您@user3227150这个问题很难理解。您对工作索引和索引的使用似乎与列表中的值相混淆。你能至少提出你喜欢的输出是什么吗?你希望返回什么?
[167.233,168.2181.367,20.6354]
?我不确定当参数为空列表时返回[0]是否有意义。也许没有,OP可以根据他的具体需要调整此函数。我不确定返回[0]是否有意义当参数为空列表时。可能不是,OP可以根据自己的具体需要调整此函数。