Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
拆下'';从python中的列表中_Python_List_Text - Fatal编程技术网

拆下'';从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]