2016-10-18 14 views
-1

の値を増やしてください。これは私がやっていることです。私はファイルをプルアップしてプログラムに読み込ませています。手紙に出会うたびに、それはlist1に文字を追加し、list2に '1'を追加します。 ライン14、lettercount [手紙:それはリスト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 

でLIST2をインクリメントします私はに実行している問題は、これを実行しているとき、私は次のエラーを取得するということです] = 1 TypeError:リストインデックスはstrではなく整数またはスライスでなければなりません

リスト[文字]でその値を数値に設定しているとは思っていましたが、好きではありません。何をすべきかについてのヒントはありますか?

+0

を[lettercount.index(手紙)] '? – Li357

+0

エラーは、それがstrを思いついており、その整数値を追加しないことを伝えています。問題を解決するために '.index'が終わると付け加えます。 – Richard

+0

エラーは、リストにアクセスするとき、インデックスは 'list_here [" string "]'ではなく 'list_here [1]'のように整数でなければならないことを伝えています。文字列が現れるインデックスを取得したい場合は 'index'を使いますが、それはあなたが望むものではないかもしれません。たぶんカウントを格納する辞書? – Li357

答えて

0

。リストは順序付けされたコレクションであり、数値インデックスを介してのみアクセスできます。そのため、整数が必要であることを示すエラーが文字列ではありません。他の答えが述べられているように、あなたは本当にdictの各文字の数を格納したいと思う。 Pythonの標準ライブラリには、ニーズのために、実際に最適ですCounter dictのサブクラスを提供 - それはあなたのために文字をカウントし、重複を削除することが容易になりますよ:あなたはlettercount `を探している

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

リストは、整数インデックスで動作する、あなたの代わりに辞書を使用することができます。

lettercount = {} #list 2 

辞書は、キー記憶する容量を持つ、オブジェクトの値なので、あなたは値をaceesする数値ではないキーを使用することができます。あなたはまだ使用できるようにそれらの使用はリストのようになります。

lettercount[letters] = 1 

辞書にキーを追加または更新するには、しかし、彼らはリストとして反復可能ではありません、あなたはキーまたはiteritemsメソッドを使用してそれらを反復処理する必要があります。 あなたがキーを反復処理することができ、結果を印刷して、カウントを表示するには、次の

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

コメントAndrewのおかげで、私の意図は非常に簡潔になり、 Pythonで辞書の使用法と機能について完全な説明をすることではありません。とにかく私は次のコメントのためにそれを考慮に入れます。 –

-1

lettercountが型辞書ではなく、リストでなければなりません。 タイプdictは値に一意のキーをマップし、リストは値のみを含みます。 リストの角括弧内の値は、リスト内の位置を参照する整数である必要がありますが、ディクショナリは角括弧内のキーを参照します。実際にどんな意味がない

lettercount['a'] += 1 

:あなたの関数の行は、本質的にこのような何かをしようとする

+0

詳細を教えてください。 – Li357

関連する問題