我有一个已定义的功能:
def map(id,txt):
mapop= []
words = txt.split()
for word in words:
tmp= (word,id,1)
mapop.append(tmp)
return mapop
我尝试使用许多方法在列表列表中应用此功能,但没有一个起作用。
下面给出了AttributeError:'list'对象没有属性'split'
list(map(len,filtered_wordList))
这会导致TypeError:map()缺少1个必需的位置参数:'txt'
[map(item) for item in filtered_wordList]
这将导致TypeError:map()接受2个位置参数,但给出了89个
mapped=[]
for line in filtered_wordList:
temp=map(*line)
mapped.append(temp)
能否让我知道我要去哪里错了。
答案 0 :(得分:0)
如果您这样使用功能图:
text = 'Stack Overflow is great'
map(2, text)
它输出:
[('Stack', 2, 1), ('Overflow', 2, 1), ('is', 2, 1), ('great', 2, 1)]
您的函数接受一个id
变量和一个文本(应该是字符串)。
它将像这样在空间上分割文本:
['Stack', 'Overflow', 'is', 'great']
并循环遍历此列表中的每个单词,并添加一个包含该单词,您传递的id和1的元组到mapop
列表中,如下所示:
('Stack', 2, 1)
在遍历每个单词之后,它返回mapop
答案 1 :(得分:0)
正如其他人指出的那样,直接的问题是您在和自己争论:您对函数应使用的参数并不一致-无论输入文本是单个句子还是句子列表。我自由地更改了函数名。我认为这是一个建议的用途,可以解决您的问题。您可以将多个语句块减少到一行,但是我希望当前版本对您而言更具可读性。
filtered_wordlist = [
'Call me Ishmael',
'The boy was odd',
'They could only say it just "happened to happen" and was not very likely to happen again.'
]
def word_id(id,txt):
mapop= []
words = txt.split()
for word in words:
tmp= (word,id,1)
mapop.append(tmp)
return mapop
lexicon = []
for id, sentence in enumerate(filtered_wordlist):
lexicon.append(word_id(id, sentence))
print(lexicon)
输出(为了便于阅读,带有额外的换行符):
[('Call', 0, 1), ('me', 0, 1), ('Ishmael', 0, 1),
('The', 1, 1), ('boy', 1, 1), ('was', 1, 1), ('odd', 1, 1),
('They', 2, 1), ('could', 2, 1), ('only', 2, 1), ('say', 2, 1),
('it', 2, 1), ('just', 2, 1), ('"happened', 2, 1), ('to', 2, 1),
('happen"', 2, 1), ('and', 2, 1), ('was', 2, 1), ('not', 2, 1),
('very', 2, 1), ('likely', 2, 1), ('to', 2, 1), ('happen', 2, 1),
('again.', 2, 1)]