2017-09-09 4 views
1

をネストされたリストで重複を削除します。私はこのようになり、ネストされたリストから重複したサブリストを削除しようとしています(サブリストで重複要素を削除せずに)

result_set = [ 
    ['MEMS', 'MEMS', 'MEMS', 'MEMS'], 
    ['Microfluidics', 'Microfluidics', 'Microfluidics', 'Microfluidics', 'Microfluidics', 'Microfluidics', 'Microfluidics'], 
    ['Microfabrication', 'Microfabrication', 'Microfabrication', 'Clean-Room Microfabrication', 'Microfabrication', 'Microfabrication'], 
    ['Photolithography', 'Photolithography', 'Lithography', 'Photolithography'], 
    ['MEMS', 'MEMS', 'MEMS', 'MEMS'] 
    ] 

私は希望の出力は以下の通りです:

result_set = [ 
    ['MEMS', 'MEMS', 'MEMS', 'MEMS'], 
    ['Microfluidics', 'Microfluidics', 'Microfluidics', 'Microfluidics', 'Microfluidics', 'Microfluidics', 'Microfluidics'], 
    ['Microfabrication', 'Microfabrication', 'Microfabrication', 'Clean-Room Microfabrication', 'Microfabrication', 'Microfabrication'], 
    ['Photolithography', 'Photolithography', 'Lithography', 'Photolithography'] 
    ] 

基本的に最後の要素['MEMS'、 'MEMS'、 'MEMS'、 'MEMS']は存在しません。 Similar questionsを尋ね、私はそこから次のコードを適応されている:

result_set = [['MEMS'], ['Microfluidics'], ['Microfabrication', 'Clean-Room Microfabrication'], ['Photolithography', 'Lithography']] 

お知らせが、それはまた、サブリスト内の重複する要素を削除します。

result_set = set(frozenset(x) for x in result) 
lst = [list(x) for x in result_set] 

私の問題は、私は次の出力を得ることです。後で私の目標はヒストグラムをプロットすることなので、私はこれを望んでいません。たとえば、MEMSには4オクルランスがあります。したがって、私は各サブリストが最初に持っていた要素の数を追跡したいと思います。

+1

あなたの質問に答えた場合は、最も役立つ回答を[同意する](https://stackoverflow.com/help/someone-answers)する必要があります。 –

答えて

3

順番は関係ない場合は、set使用することができます。

final_data = [] 
for result in result_set: 
    if result not in final_data: 
     final_data.append(result) 

出力:順序は問題でない場合、あなたはこれを試すことができ

[['Microfabrication', 'Microfabrication', 'Microfabrication', 'Clean-Room Microfabrication', 'Microfabrication', 'Microfabrication'], ['Microfluidics', 'Microfluidics', 'Microfluidics', 'Microfluidics', 'Microfluidics', 'Microfluidics', 'Microfluidics'], ['Photolithography', 'Photolithography', 'Lithography', 'Photolithography'], ['MEMS', 'MEMS', 'MEMS', 'MEMS']] 

final_data = list(map(list, set(map(tuple, result_set)))) 

出力を:

[['MEMS', 'MEMS', 'MEMS', 'MEMS'], ['Microfluidics', 'Microfluidics', 'Microfluidics', 'Microfluidics', 'Microfluidics', 'Microfluidics', 'Microfluidics'], ['Microfabrication', 'Microfabrication', 'Microfabrication', 'Clean-Room Microfabrication', 'Microfabrication', 'Microfabrication'], ['Photolithography', 'Photolithography', 'Lithography', 'Photolithography']] 
0

collections.OrderedDictを使用して、ユニークなアイテムをリトレインします。

from collections import OrderedDict 

out = list(
      map(
       list, OrderedDict.fromkeys(map(tuple, result_set)).keys() 
      ) 
    ) 
print(out) 

[['MEMS', 'MEMS', 'MEMS', 'MEMS'], 
['Microfluidics', 
    'Microfluidics', 
    'Microfluidics', 
    'Microfluidics', 
    'Microfluidics', 
    'Microfluidics', 
    'Microfluidics'], 
['Microfabrication', 
    'Microfabrication', 
    'Microfabrication', 
    'Clean-Room Microfabrication', 
    'Microfabrication', 
    'Microfabrication'], 
['Photolithography', 'Photolithography', 'Lithography', 'Photolithography']] 
0

itertools.groupby()によって生成されたキーを使用して新しいリストを作成し、リストを並べ替えます。

import itertools 
result_set.sort() 
new_set = [k for k,g in itertools.groupby(result_set)] 
関連する問題