拆下'';从python中的列表中
我有以下文字: 我想为其中的每个单词创建一个列表(标点符号是单词的一部分,因此不是单独的元素,例如:“高兴”)。 我所做的是:拆下'';从python中的列表中,python,list,text,Python,List,Text,我有以下文字: 我想为其中的每个单词创建一个列表(标点符号是单词的一部分,因此不是单独的元素,例如:“高兴”)。 我所做的是: >>> def wordlist(text): ... input= open(text,'r') ... data= input.read() ... input.close() ... data=data.replace('\n',' ') ... data=data.replace(chr(13),' ') ...
>>> 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()
的调用,可以将其转换为一个生成器,在读取时返回单词,而不是将所有单词存储在内存中
以下操作更简单、更快,但内存效率更低(这可能会影响较大的输入文件):
这大约需要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
部分被简化,因为一个空字符串的计算结果为False
这个奇怪的while循环应该做什么?如果我删除while循环,它将返回以下列表:['ADVENTURE'、'I.'、'A'、'丑闻'、'IN'、'BOHEMIA'、'I.'、'to'、…]
,正如您可以看到的列表中有'
'
data = [word for word in data if word]