2016-09-30 10 views
0

私は、各順次インデックスのサイズが異なるフロートのリストを持っています。私がやろうとしています何 すなわちfloatエントリのサイズに応じてリストを分割します

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

は、指標の山車の大きさに応じてリストを分割することです。特に、1つのインデックスの浮動小数点が以前のインデックスの浮動小数点よりも小さい場合は、それらのインデックスをまとめてグループ化し、前のインデックスよりも少ないインデックスの総数を返します。

たとえば、最初のインデックスから開始すると、値は167.233になります。次のインデックス95.6242の値が前のインデックスの値よりも小さいので、これらの2つをまとめて長さ2を返すようにしたいと思います。

3番目のインデックスは2番目のインデックスよりも大きいので新しい「ベンチマーク」次のインデックスは3番目のインデックスよりも小さいため、長さ2が返されます。 5番目のインデックスは次の「ベンチマーク」で、残りのインデックスの浮動小数点数は減少します。したがって、これらのインデックスの長さは戻ります3

私がこれを返す方法は、それらのインデックスの長さのリストです。[2,2,3]

これは混乱している場合は事前にお詫びして、言葉で説明するのは難しいです。アイテムがそのインデックスにアレイを分割し、そして最終的に分割さの配列の長さを見つけるためにmap()を使用するnumpy.split()を使用し、その後、順序付けられていないインデックスを見つけるために

+2

あなたは何をしようとしましたか? – depperm

+0

SOはHWソリューションサイトではありません:)!あなたの試行を投稿してください、そして、人々はあなたを助けます@ user3227150 –

+0

この質問は書かれているように理解するのは難しいです。あなたの仕事のインデックスとインデックスの使用は、リストの値と混同されているようです。あなたはあなたの好みの出力が何かをリースで提案できますか? –

答えて

2

使用numpy.diffnumpy.where

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]を返すのが賢明かどうかわかりません。 – xuanluong

+0

多分、OPは彼の特定のニーズにこの機能を調整することができます。 – vovaminiof

0

あなたはfloatのリストに/非増加の範囲を減少させる大きさを含むリストを取得したいように思え。

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 
関連する問題