python中的一组列表

python中的一组列表,python,list,set,Python,List,Set,我有一个列表列表: mat = [[1,2,3],[4,5,6],[1,2,3],[7,8,9],[4,5,6]] 我想转换成一个集合,即删除重复列表并从中创建一个新列表,该列表只包含唯一的列表 在上述情况下,所需答案为 [[1,2,3],[4,5,6],[7,8,9]] 但是当我设置(mat)时,它会给我错误 TypeError:不可损坏的类型:“列表” 你能解决我的问题吗。提前谢谢 列表是可变的,因此不易损坏。改用元组 In [114]: mat = [[1,2,3],[4,5,6],[

我有一个列表列表:

mat = [[1,2,3],[4,5,6],[1,2,3],[7,8,9],[4,5,6]]
我想转换成一个集合,即删除重复列表并从中创建一个新列表,该列表只包含唯一的列表

在上述情况下,所需答案为

[[1,2,3],[4,5,6],[7,8,9]]
但是当我设置(mat)时,它会给我错误

TypeError:不可损坏的类型:“列表”


你能解决我的问题吗。提前谢谢

列表是可变的,因此不易损坏。改用元组

In [114]: mat = [[1,2,3],[4,5,6],[1,2,3],[7,8,9],[4,5,6]]

In [115]: mat = [tuple(t) for t in mat]

In [116]: matset = set(mat)

In [117]: matset
Out[117]: {(1, 2, 3), (4, 5, 6), (7, 8, 9)}

In [118]: [list(t) for t in matset]
Out[118]: [[4, 5, 6], [7, 8, 9], [1, 2, 3]]
从那以后。最好的办法是将它们转换为一个元组并形成一个集合,如下所示

>>> mat = [[1,2,3],[4,5,6],[1,2,3],[7,8,9],[4,5,6]]
>>> set(tuple(row) for row in mat)
set([(4, 5, 6), (7, 8, 9), (1, 2, 3)])
>>> [list(item) for item in set(tuple(row) for row in mat)]
[[4, 5, 6], [7, 8, 9], [1, 2, 3]]
我们遍历
mat
,一次遍历一个列表,将其转换为元组(元组是不可变的,因此
set
s对它们很酷),并将生成器发送到
set
函数

如果希望将结果作为列表列表,可以通过将
set
函数调用的结果转换为列表来扩展,如下所示

>>> mat = [[1,2,3],[4,5,6],[1,2,3],[7,8,9],[4,5,6]]
>>> set(tuple(row) for row in mat)
set([(4, 5, 6), (7, 8, 9), (1, 2, 3)])
>>> [list(item) for item in set(tuple(row) for row in mat)]
[[4, 5, 6], [7, 8, 9], [1, 2, 3]]

@Fourtheye的答案清楚地描述了您在使用非散列数据类型时所面临的问题以及绕过它的方法,以便您可以创建一个集合并删除重复项。这应该足以解决大多数问题,但请重新阅读您的问题

在上述情况下,所需答案将为[[1,2,3]、[4,5,6]、[7,8,9]]

如果订单很重要,您需要使用


顺序重要吗?