python中的列表列表集

新手上路,请多包涵

我有一个 列表列表

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

但是当我做 set(mat) 时,它给了我错误

类型错误:无法散列的类型:“列表”

你能解决我的问题吗?提前致谢!

原文由 Mayank Jain 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 300
2 个回答

由于 列表是可变的,因此不能对其进行哈希 处理。最好的办法是将它们转换为一个元组并形成一个集合,就像这样

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

我们遍历 mat ,一次一个列表,将其转换为一个元组(它是不可变的,所以 set 对它们很酷)并将生成器发送到 set 函数。

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

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

原文由 thefourtheye 发布,翻译遵循 CC BY-SA 3.0 许可协议

列表是可变的,因此是不可散列的。改用元组

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

原文由 inspectorG4dget 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏