2016-03-22 1 views
0

を書く:は、私はこのようになりますリストのリストを持っているリストのリストで第一の要素を比較して、繰り返される値の数

fails = [['55','35325235432','log'], ['55','22222222','log'], ['55','3232432','log2'], ['64','55','log3'], ['64','324234324','log2']]

私は(内部リストに第一値を比較する必要があり、ここでは「55」ですおよび '64')、それが他のリストで繰り返されている場合は、その繰り返しリストを削除する必要があります。しかし、その繰り返し値の数は、最初のリストに追加する必要があります。

ので、それがすべきは次のようになります。一意の値を持つ

shorten_fails = [['55','35325235432','log','3'], ['64','55','log3', '2']]

最初のリストが保存され、1位にこの値を持つリストの数が追加されます。

私はループではなく、私はのためにあるためでためにのために仕上げ最後にこれを実行しようとしていた...と私は

+0

これは常に2レベルネストリストですか?最初の数字が最初のインデックス以外に表示される場合がありますか? – Lafexlos

+0

はい、常に2レベルで、最初の数字が他のインデックスに表示される可能性があります(上記の例ではこの状況があります) – GohanP

答えて

2

次のようにあなたがPythonのCounterOrderedDict機能を利用することができます

from collections import Counter, OrderedDict 

fails = [['55','35325235432','log'], ['55','22222222','log'], ['55','3232432','log2'], ['64','55','log3'], ['64','324234324','log2']] 

v1_counts = Counter(v[0] for v in fails) 
v1 = OrderedDict({v[0] : v for v in fails}) 
shorten_fails = [v + [v1_counts[k]] for k, v in v1.items()] 

print shorten_fails 

をこれには次の出力が表示されます:

[['55', '3232432', 'log2', 3], ['64', '324234324', 'log2', 2]] 

v1_countsは、すべての値のカウントを保持していますすなわち、

Counter({'55': 3, '64': 2}) 

v1最後shorten_failsv1エントリを取得し、各要素に対応するカウンタ値を付加することにより構成され、すなわち

OrderedDict([('55', ['55', '3232432', 'log2']), ('64', ['64', '324234324', 'log2'])]) 

、各値の最後のエントリを保持します。

1
fails = [['55','35325235432','log'], ['55','22222222','log'], ['55','3232432','log2'], ['64','55','log3'], ['64','324234324','log2']] 

first_elems = set(fail[0] for fail in fails) 
new_fails = [] 
for fail in fails: 
    first = fail[0] 
    if first in first_elems: 
     new_fails.append(fail + [sum(f[0] == first for f in fails)]) 
     first_elems.remove(first) 

print(new_fails) 
# [['55', '35325235432', 'log', 3], ['64', '55', 'log3', 2]] 
1

ことを行うための簡単な方法がなければならないと確信していますあなたはすでに短縮リストに追加した要素のインデックスを格納するルックアップテーブルとして辞書を使用することができます。

def shorten(fails): 
    sf, ind = [], {} 
    for el in fails: 
     if el[0] in ind: 
      sf[ind[el[0]]][-1] += 1 
     else: 
      ind[el[0]] = len(sf) 
      sf.append(el + [1]) 
    return sf 

>>> shorten(fails) 
[['55', '35325235432', 'log', 3], ['64', '55', 'log3', 2]] 

実際にカウンタを文字列にしたい場合は、最後の最後のリスト要素の変換を簡単に行うことができます。

+0

はい、文字列として必要ですが、問題はありません。ありがとう、ありがとう! – GohanP

関連する問題