将列表转换为集合 - Python

时间:2016-03-15 11:10:36

标签: python list set list-comprehension typeerror

我想在一个以某个字符开头的文件中打印一组行(这里是' s" 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'

2 个答案:

答案 0 :(得分:2)

如果您放弃.split(),则最终会得到一组行。

答案 1 :(得分: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())