[英]remove '' from a list in python
我有以下文本: sherlock.txt ,我想創建其中每個單詞的列表(標點符號是單詞的一部分,因此不能分隔元素,例如:'glad。')。 我所做的是:
>>> def wordlist(text):
... input= open(text,'r')
... data= input.read()
... input.close()
... data=data.replace('\n',' ')
... data=data.replace(chr(13),' ')
... data=data.replace(chr(9),' ')
... data=data.split(' ')
... while '' in data:
... data.remove('')
... return data
問題是它返回單詞列表,但大約需要花費時間。 這樣做需要7秒鍾。 有沒有一種更快的方法可以做到這一點?我知道while循環是這里的問題。
這不是在做嗎? 調用split
不分裂參數上的所有空格字符字符串,消除這些''
們給你的問題,他們甚至可以考慮數據的一部分之前。 由於您將麻煩將其他空白字符更改為' '
,因此,最好還是通過內置的默認行為免費獲得相同的效果。
def wordlist(text):
with open(text, "r") as fp:
data = fp.read().split()
return data
我相信以下內容可以滿足您的需求:
words = list(itertools.chain(*map(str.split, open('sherlock.txt'))))
在我的機器上,這需要16.5毫秒。
通過刪除對list()
的調用,可以將其轉換為生成器,該生成器將在讀取單詞時返回單詞,而不是將所有單詞存儲在內存中。
以下內容更簡單,更快捷,但內存效率較低(這可能對於較大的輸入文件很重要):
words = open('sherlock.txt').read().split()
這大約需要6.7毫秒。
嘗試使用不帶任何參數的split()
函數。 您無需先進行任何replace
-ing,因為它會在任何空格上分割。
def wordlist(text):
... input= open(text,'r')
... data= input.read().split()
... input.close()
... return data
為了論證,我們假設您無法從輸入中獲取空白字符串。 顯然,如果可以的話,這是首選方法。 列表理解可以刪除它們,否則:
data = [word for word in data if word]
if
將if
部分簡化,因為空字符串的計算結果為False
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.