2016-10-18 4 views
-1

만큼 증가 시키십시오. 제가하고있는 일입니다. 저는 파일을 가져 와서 프로그램을 읽는 중입니다. 문자를 만날 때마다 list1에 문자를 추가하고 list2에 '1'을 추가합니다. 이 목록 1에 편지를 발견 할 때마다, 그것은 1Python 3.x : 목록을 사용하여 편지가 해당 목록에 없으면 추가하십시오. 그렇지 않으면이 값을 1

txt = open("Nameoffile.txt") 
wordcount = 0 
Charcount = 0 
letterlist = [] #list 1 
lettercount = [] #list 2 

for words in txt: 
    print(words) 
    for letters in words: 
     if letters not in letterlist: 
      letterlist.append(letters) 
      lettercount[letters] = 1 
     else: 
      lettercount[letters] += 1 

     Charcount += 1 
     print(letters) 
     if letters == ' ': 
      wordcount += 1 
     if letters == '.': 
      wordcount += 1 
     if letters == '\n': 
      Charcount -= 1 
      wordcount += 1 

#down here it would print the results 

내가 실행 해요 문제의리스트 2를 증가거야이를 실행할 때, 나는 다음과 같은 오류 얻을 수 있습니다 : 라인 (14), lettercount [편지를 ] = 1 TypeError : 목록 색인은 str이 아닌 정수 또는 조각이어야합니다.

목록 [글자]에서 해당 값을 숫자로 설정한다고 생각했지만 마음에 들지 않습니다. 무엇을 할 수 있는지에 대한 힌트가 있습니까?

+0

당신이 lettercount [lettercount.index'을 찾고 계십니까을 편지)]'? – Li357

+0

이 오류는 str과 함께 나오고 정수 값을 추가하지 않는다는 것을 알려줍니다. 문제를 해결하면서 '.index'가 끝나겠습니까? – Richard

+0

목록에 액세스 할 때 색인은'list_here [ "string"]'이 아닌'list_here [1]'과 같은 정수 여야한다는 오류가 있습니다. 문자열이 나타나는 곳에서 색인을 얻으려면'index'를 사용하십시오. 그러나 원하는 것이 아닐 수도 있습니다. 어쩌면 카운트를 저장하는 사전일까요? – Li357

답변

0

함수의 라인은 본질적으로 같은 것을 할하려고합니다. 목록은 순서가 지정된 콜렉션이며 수치 인덱스를 통해서만 액세스 할 수 있습니다. 따라서 정수가 필요하다는 (문자열이 아님) 오류가 발생합니다. 언급 된 다른 답변과 마찬가지로, 당신은 실제로 dict의 각 문자에 대한 개수를 저장하려고합니다. 파이썬 표준 라이브러리는 실제로 사용자의 요구에 최적 인 Counter DICT 서브 클래스를 제공합니다 - 당신을 위해 문자를 계산하고 쉽게 중복 제거 할 수 있습니다 : (

import collections 

lettercount = collections.Counter(yourtext) 

letterlist = set(lettercount) 
charcount = len(list(c for c in lettercount.elements() if c != '\n')) 
wordcount = lettercount[' '] + lettercount['.'] + lettercount['\n'] 
+0

솔리드 응답, 나는 그것을 고맙다 노아! – Richard

0

목록 정수 인덱스 작업 대신 사전을 사용할 수 있습니다 : 당신이 값을 acees하지 않는 숫자 키를 사용할 수 있도록

lettercount = {} #list 2 

사전 키를 저장할 수있는 능력을 가지고, 개체 값. 당신은 여전히 ​​사용할 수 있도록 그들의 사용 목록과 유사합니다

lettercount[letters] = 1 

추가하거나 사전에 키를 업데이트 할 수 있지만 그들이 목록과 같은 반복 가능한하지 않습니다, 당신은 그들이 키를 사용하거나 방법을 iteritems 반복해야합니다. 건반을 반복 할 수있는 결과를 인쇄하고 수를 표시하려면 :

for e in lettercount.keys(): 
    print (e, str(lettercount[e])) 
+0

주석 주셔서 감사합니다. 내 의도는 매우 간결하고 해결 방법을 설명했습니다. 문제, 파이썬에서 사전의 사용 및 기능에 대한 완전한 설명을 제공하지 않습니다. 어쨌든 나는 다음 번 코멘트를 위해 그것을 고려할 것이다. –

-1

lettercount 유형의 DICT하지 목록이어야합니다. 형식 dict는 값에 고유 키를 매핑하고 목록에는 값만 포함됩니다. 목록의 대괄호 안의 값은 목록의 위치를 ​​나타내는 정수 여야하며 사전은 대괄호로 묶인 키를 참조합니다.

lettercount['a'] += 1 

정말 이해가되지 않습니다

+0

정성스럽게 신경 쓰시겠습니까? – Li357