2011-04-12 155 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])