簡體   English   中英

從python列表中刪除''

[英]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

是的,您可以拆分字符串。

data.split()

它將在空白處分割並返回一個數組。

拆分文檔。

我相信以下內容可以滿足您的需求:

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]

ifif部分簡化,因為空字符串的計算結果為False

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM