我正在尝试编写一个程序,它将从包含10,000个单词的Web打开一个文本文件,然后“清理”该文件以消除无意义的单词,例如'aa'。我最终想用这些词来做其他事情,所以我想添加非“无意义”的词汇放入新的列表中。每次我尝试运行此操作时,都会遇到错误代码TypeError: 'function' object is not iterable
。
import urllib.request
def readWordList():
response = urllib.request.urlopen("http://www.mit.edu/~ecprice/wordlist.10000")
html = response.read()
data = html.decode('utf-8').split()
return data
clean = readWordList()
def clean(aList):
newList = []
for word in aList:
if range(len(word)) >= 2:
newList.append(word)
return newList
clean(clean)
答案 0 :(得分:4)
下定决心:clean
应该是列表还是函数?你从一个列表开始,然后用一个函数替换它,然后告诉函数清理它自己。试试这个:
dirty_list = readWordList()
def clean(aList):
...
clean(dirty_list)
答案 1 :(得分:1)
您创建一个名为clean
的变量,通过声明具有相同名称的函数立即覆盖该名称,然后将函数clean
传递给自身。
使用相同的名称更改函数名称或上面的变量。
答案 2 :(得分:1)
首先,您创建一个名为clean
的变量,然后创建一个名为clean
的函数,最后您尝试在变量中使用该函数,这两个函数都称为clean
。你"销毁"定义函数时的变量。他们必须有不同的名字。
使用此:
import urllib.request
def readWordList():
response = urllib.request.urlopen("http://www.mit.edu/~ecprice/wordlist.10000")
html = response.read()
data = html.decode('utf-8').split()
return data
to_clean = readWordList() # Use a different name so it won't be replaced later by the function
def clean(aList):
newList = []
for word in aList:
if range(len(word)) >= 2:
newList.append(word)
return newList
clean(to_clean)
解决问题;现在他们有不同的名字。