Python删除列表中的重复项

问题描述:

我想删除重复在python列表中的方式,允许我以相同的方式更改另一个相应的列表。在下面的例子中,original是我想要去重复的列表。在key共享相同的索引原始每个元素对应于对方:Python删除列表中的重复项

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

所以我想删除重复在original使得无论元件I从原始删除我删除对应的元件(相同的索引的)在key。结果我想:

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

我能得到deduplicated _original使用list(set(original))但我不能得到相应的deduplicated_key

+0

是'['g',5,'e',6,'t','z'] “好吗?除去最后的所有东西? –

+0

你能不能显示你所做的任何尝试?你究竟在哪里卡住? –

可以使用set保持重复的跟踪和enumerate()比原先的索引/值迭代清单:

seen = set() 
lst = [] 

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

您可以手动得到这样重复的所有索引:

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] 

也许更少优雅,不容易跟随列表revesal,指数切片

内部列表排版行走输入列表org向后,询问是否有一个事先匹配元件,如果是这样的记录本的索引重复

[len(org) - 1 - i 
for i, e in enumerate(org[::-1]) if e in org[:-i-1]] 

然后外列表排版使用.pop()修改组织,KY作为副作用

嵌套列表理解 '的DUP',A '一个衬里'(换行):

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')]) 

当然,你实际上并不需要将列表匹配结果分配给任何东西,以获得修改列表的副作用