一套独特的名单
问题描述:
我有列表的列表,如:一套独特的名单
[['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']]
我试图使用“设置”,但这不起作用,因为列表不可哈脱。
答
如果新列表中的子列表顺序无关紧要,您可以使用tuple
而不是list
来存储set()
。 tuple
s是可散列的,因此可以添加到集合中。
例使用set comprehension
(对于Python 2.7+) -
setlst = {tuple(x[-3:]) for x in lst}
newlst = list(map(list, setlst))
您可以使用list comprehension与set()
作为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']]
答
你可以做到以下几点:
map(list, set(map(tuple, a)))
最内map
列表映射到元组,并且因为它是可哈希的,你可以把它应用set
。然后,您只需将其映射回list
即可。
顺序并不重要? –
@AnandSKumar顺序无关紧要。 –
噢好的,那么下面的答案应该适合你。 –