2011-04-12 226 views
1

我想查找文件中的行数和单词数。我的输入文件“testfile.txt”有6行和23个字,为了查找字数,我使用map()函数代替for循环,当我执行这个代码时,它显示了对象的内存位置,而不是“23 “: 字数=使用map函数代替for循环

我在做什么错在这里

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

这是我得到的答案 “<在0x024DF0F0地图对象>词数=”。我使用Python 3.2,如果它有一点帮助。 – Kalyan 2011-04-12 09:51:30

回答

2

IN P ython 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))

还有其他一些问题也与您的代码,但其他人都指出了这一点不够好。

0

功能单词计数不返回任何东西,写return numwords现在你的函数calcualates NUMWORDS然后默认返回None,你抹去?这个全局变量

+0

摆脱“全球宣言帮助。另外,我必须将函数的输出结果作为@sukhbir指出的列表。下面的代码工作:高清单词计数(1): NUMWORDS = 0 字= l.split() NUMWORDS + = LEN(字) 回报NUMWORDS 文件=打开( 'TESTFILE.TXT') 线=文件。 readlines() print('行数=',len(行)) numwords = list(map(wordcount,lines)) print('Number of words =',sum(numwords)) – Kalyan 2011-04-12 13:11:15

2

之后:

numwords = map(wordcount, lines) 

numwordsNone列表的长度相同lineswordcount返回None

for line in lines: 
    words = line.split() 
    numwords += len(words) 

会更好,更Python

+1

+1,或在一行中:'numwords = sum(len(line.split())for line in lines)' – eumiro 2011-04-12 10:58:42

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]) 
+0

将最后一行改为'print('Number of words =',sum(numwords))'总字数。 – 2011-04-12 10:44:21

0

在这里,映射要么返回一个列表或迭代器,所以这种修改将在任何情况下工作。 (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))) 
1

阅读段落线和...

print 'Num of words =', reduce(lambda x,y: x+y ,[len(line.split()) for line in lines])