2016-07-11 35 views
2

我想從下面的文本中提取出獨特的單詞到1列表中。蟒蛇從多行提取單詞到1列表

But soft what light through yonder window breaks 
It is the east and Juliet is the sun 
Arise fair sun and kill the envious moon 
Who is already sick and pale with grief 

但我一直在列表中爲每一行文本獲取一個列表。我知道我有一些「\ n」擺脫,但不知道如何。

這裏是我的代碼:

fname = input("Enter file name: ") 
fh = open(fname) 
lst = list() 
for line in fh: 
    line = line.rstrip("\n") 
    for word in line: 
     word = line.lower().split() 
     lst.append(word) 
print(lst) 

和輸出我得到:

[['but', 'soft', 'what', 'light', 'through', 'yonder', 'window', 'breaks'], ['it', 'is', 'the', 'east', 'and', 'juliet', 'is', 'the', 'sun'], ['arise', 'fair', 'sun', 'and', 'kill', 'the', 'envious', 'moon'], ['who', 'is', 'already', 'sick', 'and', 'pale', 'with', 'grief']] 

謝謝!

+0

'for line in line:word = line.lower()。split()'。這裏沒有用'你正在重新分配「word」。相反:'line.split()中的單詞:lst.append(word)'可能更接近你想要的。 – Evert

+0

感謝您的幫助,這些都非常有幫助。並且比我想出的解決方案更清潔:使用'count = count + 1'循環和'word [count]'。 – Nodar95

回答

2

當你做line.lower.split()你會得到一個單詞列表。你在列表中添加一個單詞列表,lst。使用擴展而不是附加。 Extend會添加split()函數返回的列表的每個元素。循環for word in line:的第二個也是不必要的。 此外,如果你想提取獨特的單詞,你可能想看看集數據類型。

2

使用此:

list += word 

相反的:

lst.append(word) 
+0

**將**添加列表添加到列表中,但** + **將它們組合在一起。 – BladeMight

+1

'.extend'可能會更加明確。也適用於非列表迭代。 –

0

列表理解確實喜歡你所做的一樣。

然後使用chain.from_iterable所有的子表到一個列表:

from itertools import chain 

lst = list(chain.from_iterable(line.lower().split() for line in f)) 
+0

OP不想要一個嵌套列表,它們試圖只獲取字符串的結果,而不是字符串的子列表。 –

+0

@ TadhgMcDonald-Jensen我誤解了OP的問題。感謝 –

+0

請使用['chain.from_iterable'](https://docs.python.org/3.5/library/itertools.html#itertools.chain.from_iterable)而不是'chain(* [..])' 。 –

0

如果順序並不重要,你可以使用設置的,而不是名單:

fname = input("Enter file name: ") 
fh = open(fname) 
uniq_words = set() 
for line in fh: 
    line = line.strip() 
    uniq_words_in_line = line.split(' ') 
    uniq_words.update(uniq_words_in_line) 
print(uniq_words) 
+0

您可能希望使用'.update'來進行就地聯合,而不是每一步重新創建一個新集。 –

+0

@ TadhgMcDonald-Jensen,很好的建議,我剛剛更新了我的答案。 –

+0

更新需要任何迭代,不需要設置調用。 –

0

由於@Shalan和@BladeMight建議,問題是word = line.lower().split()產生一個列表,append附加列表,而不是添加到它。我認爲這樣寫一個句法簡單的方法是:

fname = input("Enter file name: ") 
fh = open(fname) 
lst = list() 
for line in fh: 
    line = line.rstrip("\n") 
lst += line.lower().split()