我想获得可以包含重复值的唯一列表,我可以使用集合来获取唯一列表吗?一个集合可以有列表作为其元素吗?
更具体地讲,这里有一个例子:
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]]
这可能吗? 预先感谢您的一种回应:)
我想获得可以包含重复值的唯一列表,我可以使用集合来获取唯一列表吗?一个集合可以有列表作为其元素吗?
更具体地讲,这里有一个例子:
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]]
这可能吗? 预先感谢您的一种回应:)
不,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]]
好吧,我仍然没有得到预期的结果:在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
@deb:mind t帽子'my_list'包含**所有列表**。 –
我的意思是它仍然在同一个 – deb
列表是不哈希的,但你可以有一个元组集,:
set(map(tuple, my_list))
# {(1, 1, 2), (1, 2, 1), (1, 2, 2), (2, 2, 2)}
这仍然显示我所有重复值 – deb
不,列表不可排除... –
然后我可以用什么来执行此操作? – deb
您可以使用元组而不是列表。 –