一组唯一的列表

时间:2015-10-07 08:25:49

标签: python list set

我有一份清单,例如:

[['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"但这不起作用,因为列表不可清除。

2 个答案:

答案 0 :(得分:3)

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

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

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

对于不支持set comprehension的Python版本,您可以list comprehension使用set()作为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']]

答案 1 :(得分:1)

您可以执行以下操作:

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

最内层map将列表映射到元组,由于它是可清除的,因此您可以在其中应用set。然后,您只需将其映射回list

相关问题