我正在尝试获取可以包含重复值的唯一列表,我可以使用集合来获取唯一列表吗?
更具体地说,这是一个例子:
my_list=[[1,2,1],[1,2,2],[1,2,2],[1,1,2],[2,2,2]]
我想要的是:
set_list=[[1,2,1],[1,2,2],[1,1,2],[2,2,2]]
这可能吗?
在此先感谢您的回复:)
答案 0 :(得分:2)
列表不可清除,但您可以拥有一组元组:
set(map(tuple, my_list))
# {(1, 1, 2), (1, 2, 1), (1, 2, 2), (2, 2, 2)}
答案 1 :(得分:1)
不, list
不可用。您将收到以下错误:
TypeError: unhashable type: 'list'
鉴于列表仅包含可散列对象,您可以将列表转换为tuple
并添加元组。所以你可以这样做:
>>> my_list=[[1,2,1],[1,2,2],[1,2,2],[1,1,2],[2,2,2]]
>>> set_tuples = {tuple(a_list) for a_list in my_list}
>>> set_tuples
{(1, 2, 2), (1, 2, 1), (2, 2, 2), (1, 1, 2)}
然后,您可以使用以下方法构建唯一性过滤器:
my_list=[[1,2,1],[1,2,2],[1,2,2],[1,1,2],[2,2,2]]
result = []
unique_set = set()
for sublist in my_list:
the_tuple = tuple(sublist)
if the_tuple not in unique_set:
unique_set.add(the_tuple)
result.append(sublist)
所以集合上的所有操作都是用元组完成的。这给出了:
>>> result
[[1, 2, 1], [1, 2, 2], [1, 1, 2], [2, 2, 2]]