2016-06-22 2 views
1

[1,1,2,2,2,3,3,4,4,4,5,5]のようなインデックス値のリストと、それらのインデックスのそれぞれは[3,14,6,13,15,3,7,18,4,12,17,2,9]のようになります。同じシーケンスの最初のインデックス(例えば、[2,2,2]の最初の2つ)の場合、特性値は常に最小値(ここでは6)であり、類似インデックスの数とともに増加します(例えば、それは15に向かって増加する)。連続した類似の値と置換を確認する

私は、同様のインデックス(インデックスのシーケンス)を探して、それぞれのインデックスが最小の特性値を得るように特性値を変更したいと思います(例えば、[2,2,2] 6]の代わりに[6,13,15])。

どうすればいいですか? (もしあればまたは多分あなたは私のツールを示すことができます)


(この最後の文は、それほど重要ではない)

シーケンスの場合も、私は< 10であることを最小特性値を必要としますすべての特性値のインデックスが> 10である場合、前のインデックスシーケンスから最小の特性値を取って置き換えたいと思います。

+2

*ツールを示す*はSOのために意味されるものではありません。私たちはあなたが[mcve] –

答えて

1

は、このコードを試してみて:あなたの例ではリストindicesvaluesの長さが異なること

from itertools import groupby 
from operator import itemgetter 
indices = [1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5] 
values = [3, 14, 6, 13, 15, 3, 7, 18, 4, 12, 17, 2, 9] 
pairs = zip(indices, values) 
sequences = [[v for (i, v) in group] for (_, group) in groupby(pairs, itemgetter(0))] 
min_char_vals = [min(seq) for seq in sequences for _ in seq] 

お知らせ。この問題を解決するためにアイテムをindicesに追加しました。あなたの質問の後半部分については

In [232]: pairs 
Out[232]: 
[(1, 3), 
(1, 14), 
(2, 6), 
(2, 13), 
(2, 15), 
(3, 3), 
(3, 7), 
(3, 18), 
(4, 4), 
(4, 12), 
(4, 17), 
(5, 2), 
(5, 9)] 

In [233]: sequences 
Out[233]: [[3, 14], [6, 13, 15], [3, 7, 18], [4, 12, 17], [2, 9]] 

In [234]: min_char_vals 
Out[234]: [3, 3, 6, 6, 6, 3, 3, 3, 4, 4, 4, 2, 2] 

、しきい値以下min_char_valsの要素を保つために、あなたには、いくつかのインプレースポストを実行する必要があります。

次の対話型セッションでは、作品上記のスニペットは、方法を示していますmin_char_valsの処理:

for i, mcv in enumerate(min_char_vals): 
    if mcv >= 10: 
     min_char_vals[i] = 0 if i == 0 else min_char_vals[i-1] 

条件式をデフォルト最小特性値を割り当てることを目的としている(私は私のコードで0を使用)の最初の要素にその値が10以上の場合はになります。

あなたが初期化を変更する場合:

values = [3, 14, 6, 13, 15, 13, 17, 18, 4, 12, 17, 2, 9] 

とあなたが説明した後処理を行い、これはあなたが得るものです:

In [280]: min_char_vals 
Out[280]: [3, 3, 6, 6, 6, 6, 6, 6, 4, 4, 4, 2, 2] 
関連する問題