我想在文件中找到行数和单词数。我的输入文件“testfile.txt”有6行和23个单词。用于查找单词数我使用map()函数而不是for循环。当我执行此代码时,它显示对象的内存位置而不是“23” “: 字数=
我在这里做错了什么?
def wordcount(l):
global numwords
words = l.split()
numwords += len(words)
f=open('testfile.txt')
lines = f.readlines()
numlines = len(lines)
print ('Number of lines =', numlines)
numwords=0
numwords = map(wordcount, lines)
print ('Number of words =', numwords)
答案 0 :(得分:2)
后:
numwords = map(wordcount, lines)
numwords
是与None
长度相同的lines
列表,wordcount
返回None
for line in lines:
words = line.split()
numwords += len(words)
会更好,更pythonic
答案 1 :(得分:2)
在Python 3中,map
是一个迭代器:(类似于:itertools.imap
)
class map(object)
| map(func, *iterables) --> map object
|
| Make an iterator that computes the function using arguments from
| each of the iterables. Stops when the shortest iterable is exhausted.
在Python 2中:
map(...)
map(function, sequence[, sequence, ...]) -> list
默认情况下返回list
。
所以在你的情况下,你需要这样做:
numwords = list(map(wordcount, lines))
您的代码还存在其他问题,但其他人已经指出了这一点。
答案 2 :(得分:1)
你应该避免使用像'numwords'这样的全局变量。你必须在wordcount()函数中返回numwords。
此代码有效:
def wordcount(l):
numwords = 0
words = l.split()
numwords += len(words)
return numwords
f = open('testfile.txt')
lines = f.readlines()
numlines = len(lines)
print('Number of lines =', numlines)
numwords = 0
numwords = map(wordcount, lines)
print ('Number of words =', numwords)
我的testfile.txt包含:
Hello world
my name is
james bond
输出:
('Number of lines =', 3)
('Number of words =', [2, 3, 2])
答案 3 :(得分:1)
阅读段落和......
print 'Num of words =', reduce(lambda x,y: x+y ,[len(line.split()) for line in lines])
答案 4 :(得分:0)
函数wordcount不返回任何内容,写return numwords
现在你的函数计算numwords,然后默认返回None,并删除这个全局变量
答案 5 :(得分:0)
在这里,map或者返回一个列表或迭代器,所以这个修改将适用于任何一种情况。 (python2 vs python3)
def wordcount(l):
global numwords
words = l.split()
numwords += len(words)
f=open('testfile.txt')
lines = f.readlines()
numlines = len(lines)
print ('Number of lines =', numlines)
numwords=0
numwords = map(wordcount, lines)
print ('Number of words =', len(list(numwords)))