集合可以将列表作为其元素吗?

时间:2017-03-10 15:58:13

标签: python logic

我正在尝试获取可以包含重复值的唯一列表,我可以使用集合来获取唯一列表吗?

更具体地说,这是一个例子:

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]]
这可能吗? 在此先感谢您的回复:)

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