2017-03-10 74 views
0

我想获得可以包含重复值的唯一列表,我可以使用集合来获取唯一列表吗?一个集合可以有列表作为其元素吗?

更具体地讲,这里有一个例子:

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

这可能吗? 预先感谢您的一种回应:)

+1

不,列表不可排除... –

+0

然后我可以用什么来执行此操作? – deb

+0

您可以使用元组而不是列表。 –

回答

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]] 
+0

好吧,我仍然没有得到预期的结果:在my_list 对于我:/ 我得到了如下的结果 ... the_tuple =元组(I) ...如果the_tuple不是在unique_set: ... unique_set.add(the_tuple) ... result.append(ⅰ) ... >>> unique_set 集([((),), ((1,), (2,2),(2,2),(2,1),(2,2),(2,1),(2,2))](((1,2) ) >>>结果 [[(1,),(2,),(2,)],[(1,2),(1,2),(2,1),(2,2), (2,1),(2,2)]] >>> – deb

+0

@deb:mind t帽子'my_list'包含**所有列表**。 –

+0

我的意思是它仍然在同一个 – deb

2

列表是不哈希的,但你可以有一个元组集,:

set(map(tuple, my_list)) 
# {(1, 1, 2), (1, 2, 1), (1, 2, 2), (2, 2, 2)} 
+0

这仍然显示我所有重复值 – deb

相关问题