我有一份清单,例如:
[['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"但这不起作用,因为列表不可清除。
答案 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
。