将Python 3中的一组列表转换为一组集合。

3

我有一个列表的列表,想将其转换为一组列表,以便与其他集合进行比较。

例如,我想做:

mylist = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
myset = set(mylist)
myset

并获取:

{[1, 2, 3], [4, 5, 6], [7, 8, 9]}

但是出现了以下错误:
Traceback (most recent call last):
  File "A:/Users/.../Testfile.py", line 2, in <module>
    myset = set(mylist)
TypeError: unhashable type: 'list'

我也尝试了这个解决方案,这是在 https://dev59.com/xF0a5IYBdhLWcg3wCE7P 上发布的:

myset = set(x for lst in mylist for x in lst)
print(myset)

但这会合并所有内部列表。
{1, 2, 3, 4, 5, 6, 7, 8, 9}

有没有一种方法可以将mylist转换为列表集合?

1
@Hari 问题在于它只适用于可哈希项的列表,而列表本身不可哈希,就像错误消息所指出的那样。 - LogicalX
2个回答

5

在Python中,列表是不可哈希的。相反,应该映射到元组(tuple),因为元组是可以哈希的:

>>> mylist = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> set(map(tuple, mylist))
{(4, 5, 6), (7, 8, 9), (1, 2, 3)}
>>> set(tuple(x) for x in mylist)
{(4, 5, 6), (7, 8, 9), (1, 2, 3)}

您也可以在此处使用一个干净的集合推导式:

>>> {tuple(x) for x in mylist}
{(4, 5, 6), (7, 8, 9), (1, 2, 3)}

3

你是否愿意将你的数组转换为元组?

mylist = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
myset = set()

for array in mylist:
  myset.add(tuple(array))

print(myset)

这会给你一个:{(4, 5, 6), (7, 8, 9), (1, 2, 3)}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接