2016-03-15 71 views
2

我想在一個以特定字符(這裏是「c」)開頭的文件中打印一組行,但每當我嘗試將列表轉換爲設置將一個列表變成一組 - Python

我有以下代碼:

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' 
+0

如果line.startswith((「c」))「是一個生成器表達式,則此」line.rstrip()。split()for line in z。也許是這樣。 –

回答

1

即使你刪除掉.split(),你將與你的組線結束。

+0

謝謝親愛的先生,這解決了我的問題! – 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()) 
+0

謝謝你,這也幫助了我! – Karatawi

相關問題