2015-10-07 71 views
1

我有列表的列表,如:一套独特的名单

[['4bb', '3bb', '3', '1', '2', '4b', '4'], 
['4bb', '3bb', '1', '3', '2', '4b', '4'], 
['4bb', '3bb', '1', '2', '3', '4b', '4'], 
['4bb', '1', '3bb', '3', '2', '4b', '4'], 
['4bb', '1', '3bb', '2', '3', '4b', '4']] 

我想创建一个较短的名单列表 - 只有三个每个列表的最右边的元素,使得元素是唯一的,例如:

[['2', '4b', '4'], 
['3', '4b', '4']] 

我试图使用“设置”,但这不起作用,因为列表不可哈脱。

+0

顺序并不重要? –

+0

@AnandSKumar顺序无关紧要。 –

+0

噢好的,那么下面的答案应该适合你。 –

回答

3

如果新列表中的子列表顺序无关紧要,您可以使用tuple而不是list来存储set()tuple s是可散列的,因此可以添加到集合中。

例使用set comprehension(对于Python 2.7+) -

setlst = {tuple(x[-3:]) for x in lst} 
newlst = list(map(list, setlst)) 

您可以使用list comprehensionset()作为set([<list comp>])对于其中不支持集理解的Python版本。

演示 - 在新的列表子列表的

>>> lst = [['4bb', '3bb', '3', '1', '2', '4b', '4'], 
... ['4bb', '3bb', '1', '3', '2', '4b', '4'], 
... ['4bb', '3bb', '1', '2', '3', '4b', '4'], 
... ['4bb', '1', '3bb', '3', '2', '4b', '4'], 
... ['4bb', '1', '3bb', '2', '3', '4b', '4']] 
>>> 
>>> setlst = {tuple(x[-3:]) for x in lst} 
>>> newlst = list(map(list, setlst)) 
>>> newlst 
[['2', '4b', '4'], ['3', '4b', '4']] 
1

你可以做到以下几点:

map(list, set(map(tuple, a))) 

最内map列表映射到元组,并且因为它是可哈希的,你可以把它应用set。然后,您只需将其映射回list即可。