Python 根据浮动条目的大小拆分列表
我有一个浮动列表,其中每个顺序索引的大小可以不同。 i、 e 我试图做的是根据索引中浮动的大小分割列表。特别是,如果一个指数的浮动小于前一个指数的浮动,则将这些指数组合在一起,以返回小于前一个指数的指数总数 例如,如果我们从第一个索引开始,则值为167.233。因为下一个索引95.6242的值比前一个索引的值小,所以我想将这两个索引组合在一起,以返回它们的长度,即2 第三个指数比第二个指数大,因此这成为新的“基准”。由于以下索引小于第三个索引,因此返回长度2。 第五个指数是下一个“基准”,其余指数的浮动减少,因此返回这些指数的长度3 我希望返回的方式是这些索引的长度列表,即[2,2,3]Python 根据浮动条目的大小拆分列表,python,Python,我有一个浮动列表,其中每个顺序索引的大小可以不同。 i、 e 我试图做的是根据索引中浮动的大小分割列表。特别是,如果一个指数的浮动小于前一个指数的浮动,则将这些指数组合在一起,以返回小于前一个指数的指数总数 例如,如果我们从第一个索引开始,则值为167.233。因为下一个索引95.6242的值比前一个索引的值小,所以我想将这两个索引组合在一起,以返回它们的长度,即2 第三个指数比第二个指数大,因此这成为新的“基准”。由于以下索引小于第三个索引,因此返回长度2。 第五个指数是下一个“基准”,其余指
提前道歉如果这让人困惑,很难用语言解释。使用
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可以根据自己的具体需要调整此函数。