2013-01-31 3 views
0
def get_word_count(wordlist, final): 
    regex = [] 
    count = [[] for x in xrange(len(wordlist))] 
    frequency = [] 
    regex = makeregex(wordlist) 
    for i in range(len(final)-1): 
     size = os.stat(final[i]).st_size 
     fil = open(final[i]) 
     if(fil): 
      print final[i] + " read!" 
      data = mmap.mmap(fil.fileno(), size, access=mmap.ACCESS_READ) 
      for j in range (len(wordlist)): 
       count[j].append(re.findall(regex[j], data)) 
     fil.close() 
    for k in range(len(wordlist)): 
     frequency.append(sum(count[k])) 
    print frequency 

count은 목록의 목록이며 모든 목록에는 일부 숫자가 저장되어 있습니다.지원되지 않는 피연산자 유형 오류 (파이썬에서 지원되지 않음)

Traceback (most recent call last): 
File "C:\Users\Animesh\Desktop\_zipf.py", line 52, in <module> 
get_word_count(wordlist, final) 
File "C:\Users\Animesh\Desktop\_zipf.py", line 32, in get_word_count 
frequency.append(sum(count[k])) 
TypeError: unsupported operand type(s) for +: 'int' and 'list' 

내가 내 코드에서 무엇을 변경해야합니다 : 나는 오류가 나는 코드를 실행하면 새 목록 frequency

에 요소로 모든 목록의 합을 저장하고자? 당신은 배열 count[j]에 정규식에 의해 발견 단어의 목록을 추가하는

+1

위의 코드 또는'makeregex'에서 오류가 발생합니까? 'final [i]'가 문자열이 아니지만 아직까지 도달하지 않은 것처럼 보일 경우'print [i] + "read!"에서 코드가 실패 할 수 있습니다. –

+1

'sum '이 호출되기 전에'count [k]'의 값을 출력 할 수 있습니까? 당신의'count [k]'는'[[], 2]'와 같은 것을 가지고 있습니다. 합쳐보기를 시도하면 에러 메시지가 나옵니다. –

답변

2
count[j].append(re.findall(regex[j], data)) 

수 있도록, 각각의 count 요소는 문자열 목록의 목록, 따라서 오류 sum(count[k])를 호출하십시오.

count[j].append(len(re.findall(regex[j], data))) 
1

당신이 그것을 간단하게하려면, 당신은 루프의 뒷부분에있는 count = [[] for x in xrange(len(wordlist))]을 없애 그냥 count = []을 가지고 수 :

난 당신이 count[k]에 발견 단어의 수를 추가 할 생각 임시 변수를 증가시키고 for 루프 다음에 세도록 추가합니다.

size = 0 
for j in range (len(wordlist)): 
    size += len(re.findall(regex[j], data)) #thanks to CharlesB for this bit 
count.append(size) #you could also cut out the middle man and just append frequency 
관련 문제