2017-09-22 8 views
1

同じ方法で別の対応リストを変更できるように、Pythonリスト内の重複を削除したいと思います。以下の例では、originalは重複排除したいリストです。オリジナルと同じインデックスを共有keyの各要素は、互いに対応する:リスト内の重複を削除するPython

original = [a,a,a,3,4,5,b,2,b] 
key  = [h,f,g,5,e,6,u,z,t] 

だから、私は、元から削除どんな要素Iは、(同じインデックス)は、対応する要素を削除するようにoriginalで重複を削除しますkeyにあります。私が欲しいの結果:

deduplicated_original = [a,3,4,5,b,2] 
deduplicated_key  = [h,5,e,6,u,z] 

私は、しかし、私はあなたが元のインデックス/値を反復するために、重複してenumerate()を追跡するためにsetを使用することができ、対応するdeduplicated_key

+0

'['g'、5、 'e'、6、 't'、 'z'] 「大丈夫?最後のもの以外のすべての削除? –

+0

あなたはどんな試みをしてもらえますか?あなたはどこにいらっしゃいますか? –

答えて

6

を取得することはできませんlist(set(original))を使用して_original deduplicatedを得ることができますリスト:

seen = set() 
lst = [] 

for i, v in enumerate(original): 
    if not v in seen: 
     lst.append(key[i]) 
     seen.add(v) 
print(lst) 
0

あなたが手動でこのような重複のすべてのインデックスを取得することができます:

indices = [] 
existing = set() 
for i, item in enumerate(original): 
    if item in existing: 
     indices.append(i) 
    else: 
     existing.add(item) 

し、キーを削除すると、さらにアイテムのインデックスが変更されるため、逆に、あなたのkeyリストからこれらのインデックスを削除します。

for i in reversed(indices): 
    del key[i] 
1

は、多分あまりエレガントリストrevesalに従うことにくく、インデックス・スライシング

ので、この重複

のインデックスを記録する場合、内側リストCOMPは、前整合要素があるかどうかを尋ねる、後方入力リスト orgを歩きます3210

は、次いで、外側リストCOMPは副作用として組織、KYを変更する.pop()を使用

ネストされたリストの内包(改行付き)「のDUP」、「ワンライナー」

org = ['a','a','a',3,4,5,'b',2,'b'] 
ky = ['h','f','g',5,'e',6,'u','z','t'] 

dups = [(org.pop(di), ky.pop(di)) 
     for di in [len(org) - 1 - i 
        for i, e in enumerate(org[::-1]) if e in org[:-i-1]]] 

org, ky, dups 
Out[208]: 
(['a', 3, 4, 5, 'b', 2], 
['h', 5, 'e', 6, 'u', 'z'], 
[('b', 't'), ('a', 'g'), ('a', 'f')]) 

のリストを変更する副作用を得るために、実際にリストのcomp resultを何かに割り当てる必要はありません。

関連する問題