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
答
可以使用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')])
的
当然,你实际上并不需要将列表匹配结果分配给任何东西,以获得修改列表的副作用
是'['g',5,'e',6,'t','z'] “好吗?除去最后的所有东西? –
你能不能显示你所做的任何尝试?你究竟在哪里卡住? –