一组独特的列表

A set of unique lists

我有一个列表列表,例如:

[['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']]

我尝试使用 "set" 但这不起作用,因为列表不可散列。

您可以执行以下操作:

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

最内部的 map 将列表映射到元组,并且由于它是可散列的,因此您可以在其中应用 set。然后你只需将它映射回 list.

如果新列表中子列表的顺序无关紧要,您可以使用 tuple instead of list to store in the set()tuples 是可散列的,因此可以添加到集合中。

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

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

对于不支持集合理解的 Python 版本,您可以将 list comprehensionset() 用作 set([<list comp>])

演示 -

>>> 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']]