将列表转换为集合 - Python

3
我想要打印一个以特定字符(这里是"c")开头的文件中的一系列行,但每次尝试将列表转换为集合时,都会出现错误。
以下是我的代码:
z = open("test.txt", "r")
wordList = [line.rstrip().split() for line in z if line.startswith(("c"))]
wordList = set(wordList)
print(wordList)

我得到的错误如下:

Traceback (most recent call last):
   wordList = set(wordList)
TypeError: unhashable type: 'list'

这个 "line.rstrip().split() for line in z if line.startswith(("c"))" 是一个生成器表达式。也许是这种情况。 - Marcel Słabosz
2个回答

2
如果你去掉`.split()`,你将得到一组行。

非常感谢您,亲爱的先生,这解决了我的问题! - Karatawi

0

为了进行高效的查找,set 只能使用可哈希类型。特别地,可哈希类型必须是不可变的,也就是说,在构造之后它们不能被改变。由于你可以向列表中添加元素并从中删除元素,所以它是可变的。相比之下,tuple 在构造之后就是固定的且可哈希的。

因此,如果你真的想要一个单词序列的集合,你需要将每行的单词从列表转换为元组:

with open("test.txt", "r") as z:
    wordList = set(tuple(line.rstrip().split()) for line in z if line.startswith("c"))

编辑:如果您想要以“c”开头的所有行中的单词集合,请使用以下内容:

with open("test.txt", "r") as z:
    wordList = set(w for line in z if line.startswith("c") for w in line.rstrip().split())

谢谢,这也帮助了我! - Karatawi

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