2017-08-30 6 views
1

私は0と1のリストを持っているとしましょう:example_list = {0, 1, 0, 1, 1}異なるリストの特定の値のカウントに対応する要素を持つリストを生成する

私は、次のコマンドを経由してのみゼロと唯一のサブリストを作成します。

zero_list = len[i for i in example_list if i == 0] 
one_list = len[i for i in example_list if i == 1] 

これはzero_list = {0, 0}one_list = {1, 1, 1}を与えます。

私がしたいのは、zero_listone_listにある0と1のインデックスを、それぞれexample_listという同じ長さの新しいリストにマップすることです。私。私は取得したい:

new_list = {0, 0, 1, 1, 2} 

誰もがこれにアプローチする方法を考えている?

+2

あなたがしようとしているものをご提示ください。あなたは[mcve]を提供できますか?この質問は現在広範囲に及んでいる。 –

+0

申し訳ありませんクリスチャン、私は説明よりも明確にするのに苦労しています。はい、私はタイトルのタイトルが広すぎる、編集することに同意します。 –

+0

申し訳ありません、ありがとう@ T.Ray Jr.、ありがとう。 –

答えて

2

リストを反復処理しながら、あなたはカウンターのような辞書としてdefaultdictを使用することができます。

from collections import defaultdict 
example_list = [0, 1, 0, 1, 1] 
encountered = defaultdict(int)  # returns 0 as value for all keys that aren't set. 

res = [] 
for item in example_list: 
    res.append(encountered[item]) # append the number of times this number was seen 
    encountered[item] += 1   # increment the times 

>>> res 
[0, 0, 1, 1, 2] 

それとも、ジェネレータ関数としてそれをご希望の場合:

def cumulative_count(it): 
    cnts = defaultdict(int) 
    for item in it: 
     yield cnts[item] 
     cnts[item] += 1 

>>> list(cumulative_count([0, 1, 0, 1, 1])) 
[0, 0, 1, 1, 2] 
関連する問題