2016-09-30 2 views
0

각 순차 색인의 크기가 다를 수있는 부동 소수점 목록이 있습니다. 는 내가 뭘하려고 인덱스에서 수레의 크기에 따라 목록을 분할float 항목의 크기에 따라 목록을 분할합니다.

float_list = [167.233, 95.6242, 181.367, 20.6354, 147.505, 41.9396, 20.3126] 

즉. 특히 한 인덱스의 float 값이 이전의 인덱스 값보다 작 으면 인덱스를 그룹화하여 이전보다 작은 인덱스의 총 개수를 반환합니다.

예를 들어 첫 번째 색인부터 시작하면 값은 167.233입니다. 다음 인덱스의 값인 95.6242는 이전의 값보다 작기 때문에이 두 값을 함께 그룹화하여 길이 2를 반환합니다.

세 번째 인덱스는 두 번째 인덱스보다 크기 때문에이 값이됩니다. 새로운 '벤치 마크' 다음 인덱스는 세 번째 인덱스보다 작기 때문에 길이 2를 반환합니다. 다섯 번째 인덱스는 다음 '벤치 마크'이며 나머지 인덱스의 부동 소수점은 감소하므로 해당 인덱스의 길이가 반환됩니다.

이 결과를 반환하는 방법은 해당 색인의 길이 목록입니다. 즉, [2,2,3]

미리 혼란 스러울 경우 사전에 사과하여 말로 설명하기가 어렵습니다.

+2

괜찮습니까? – depperm

+0

SO가 HW 솔루션 사이트가 아닙니다 :)! 귀하의 시도를 게시하고 사람들이 당신을 도울 것입니다 @ user3227150 –

+0

이 질문은 서면으로 이해하기 어렵습니다. 작업 색인 및 색인 사용은 목록의 값과 혼동스러워 보입니다. 당신이 임대에서 당신이 선호하는 생산물을 제안 할 수 있습니까? –

답변

2

사용 numpy.diffnumpy.where 항목은 다음 갈라 배열의 길이를 찾기 위해 map()를 사용 마침내 인덱스의 배열을 분할하고 numpy.split()을 사용하여 정렬되지 않은 인덱스 찾기 위해 :

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] 
0

당신은 다음처럼 할 수도 있습니다 : 당신이 수레의 목록에/비 증가 범위를 감소의 크기를 포함하는 목록을 가져올 같은

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] 
+0

인수가 빈 목록 인 경우 [0]을 반환하는 것이 sens가되는지 확실하지 않습니다. – xuanluong

+0

아마도 OP는이 기능을 자신의 특정 요구에 맞게 조정할 수 있습니다. – vovaminiof

0

것 같다.

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 
관련 문제