如何从字符串列表中删除重复项?

问题描述:

我需要此列表的帮助。我现在不怎么解决这个问题。如何从字符串列表中删除重复项?

我有这个名单

s = [['aaa', 'bbb'], ['ccc', 'bbb'], ['bbb', 'ddd'], ['fff', 'ddd'], ['ccc', 'eee']] 

我想从这个名单中删除重复项。

输出必须:

[['aaa', 'bbb'], ['fff', 'ddd'],['ccc', 'eee']] 
+0

我不太确定这里应该发生什么 - 您是否尝试删除包含非唯一字符串的所有子列表,同时确保包含原始列表中存在的任何字符串都包含在内在输出的某个地方? – GoBusto 2014-11-08 16:32:25

+0

是的,如果包含非唯一字符串,我想删除所有子列表。 – Celjan 2014-11-08 16:36:08

+0

请介意编辑原始问题以澄清此问题吗?另外,你会如何期待这样的半独特的子列表被处理:'[['aaa','bbb'],['ccc','aaa'],['ddd','eee']] ' – GoBusto 2014-11-08 16:39:29

s = [['aaa', 'bbb'], ['ccc', 'bbb'], ['bbb', 'ddd'], ['fff', 'ddd'], ['ccc', 'eee']] 

flaten = [ j for i in s for j in i ] 
filter_l = list(set(flaten)) 

res = [] 
for ele in s: 
    if ele[0] in filter_l and ele[1] in filter_l : 
     res.append(ele) 
     filter_l.remove(ele[0]) 
     filter_l.remove(ele[1]) 

print res 

output : [['aaa', 'bbb'], ['fff', 'ddd'], ['ccc', 'eee']] 

那么有可能是更优化的方式来实现它,但是这是我得到。

+0

@Downvoter请在评论中添加您的理由。 – 2014-11-08 18:55:11

如何使用下面的代码?

s = [['aaa', 'bbb'], ['ccc', 'bbb'], ['bbb', 'ddd'], ['fff', 'ddd'], ['ccc', 'eee']] 

def get_unique_pairs(pairs): 
    unique_pairs = [] 
    for pair in pairs: 
     unique_pairs_flattened = [x for p in unique_pairs for x in p] 
     if not (pair[0] in unique_pairs_flattened or pair[1] in unique_pairs_flattened): 
      unique_pairs.append(pair) 

    return unique_pairs 

print(get_unique_pairs(s)) # => [['aaa', 'bbb'], ['fff', 'ddd'],['ccc', 'eee']]