2015-10-07 70 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即可。