2012-03-01 13 views
1

を使用して、リスト内の重複したエントリを削除しますNAME1' 、 'UGA'、 'GGU']としてpythonで開かれたとして、私はエントリで大きなファイルを持っているのpython

[ 'DEF'、 'C​​HR9'、 '14855289'、NAME19' 、 'UCG'、 'GUC']

[ 'TTC'、「CHR9 '、' 793946 '、' NAME178 '、' CAG '、' GUC ']

[ 'ABC'、 'C​​HR9'、 '3468582'、 'NAME272'、 'UGT'、 'GCU']

私は一意のエントリを抽出し、COL1で同じ値を持つエントリを削除する必要があり、COL2 col3。この場合のように、最後の行はcol1、col2、col3に基づいて行1と同じです。

は、私は二つの方法を試みたが失敗している

方法1:

outlist=[] 

for element in parsed_in:  
    if element[0:3] not in outlist[0:3]: 
    outlist.append(element) 

方法2:

outlist=[] 
parsed_list=list(parsed_in) 
for element in range(0,len(parsed_list)): 
    if parsed_list[element] not in parsed_list[element+1:]: 
    outlist.append(parsed_list[element]) 

これらは両方に基づいてすべてのエントリではなく一意のエントリをバック与えます最初の3列。

私のセットにあなたのリストを変換し

にそうAK

+3

[どのようにPythonでリストから重複を削除しますか?]の可能複製(http://stackoverflow.com/questions/479897/how-do-you-remove-duplicates-from-a-list-in- Python) – kennytm

+0

彼のリストは、データの一部のみに基づいてユニークではなく、データセット全体ではなく、重複しません。 – MitMaro

答えて

2

おそらく追加しているときに自分で要素の完全スキャンを保存するためにO(1)ルックアップを使用したい、とCaol Acainが言ったように、それを行うには良い方法です設定します。あなたが交互に行にキーをマッピングする辞書を使用することもできましたが、これはあなたが入力の順序を保持しないことを警告しています

outlist=[] 
added_keys = set() 

for row in parsed_in: 
    # We use tuples because they are hashable 
    lookup = tuple(row[:3])  
    if lookup not in added_keys: 
     outlist.append(row) 
     added_keys.add(lookup) 

:あなたが何をしたいか

のようなものですしたがって、リストとキーセットを使用すると、ファイル内でオーダーを保持することができます。

+0

最初の良い答えは、私が投稿しようとしていたものよりはるかに優れています。 +1 – MitMaro

0

を行う方法を提案してください!

http://docs.python.org/tutorial/datastructures.html#sets

+0

私はこれを最初に考えましたが、問題をもっと近づけば、セットは機能しません。リストの各項目は、サブリストの最初の3つの要素でのみ一意です。 – MitMaro

関連する問題