2016-05-03 3 views
2

基本的にはタイトルの通り、文字が文字列に現れる回数を数えてみます。それらを数えた後、私はそれらが文字がリスト内のそれぞれの番号に何回現れるかを印刷するようにします。手紙が現れた回数を数えてリストに書いてください

t="QWERTYYQWERTYYY" 
tList=[0]*26 
lC=0 
idx=0 
for char in t: 
    ch=ord(char) 
    if ch >=65 and ch<=90 or ch >=97 and ch <= 122: 
     lC=lC+1 
     #I dont know what to do from here. 

for ele in tList: 
    print(idx, ": ", tList[]) #I dont know what to put in the brackets 
    idx+=1 

私は、LCを印刷するとき、それは文字の量をカウントした私に語ったが、イムはIDXリストに従った番号にそれを印刷するのに苦労。

+0

下から大文字に変換するか、逆に変換する必要があります。私はあなたがループの一番上でそれを一度行うことをお勧めします: 'for char in t.upper():'。私はさらに、A = ord( 'A') 'を定義し、それをあなたの数学で使用することを提案します。可能であれば 'Z'。 –

+1

[文字列内の各文字の頻度を数えます]の重複の可能性があります(http://stackoverflow.com/questions/10806866/counting-each-letters-frequency-in-a-string) – TessellatingHeckler

+0

'print'の後にかっこがあるのでs、あなたはPython 3.xを使っていると思います。その場合は、大/小文字に変換するのではなく、 'str.casefold()'を使用してください。その後、あなたはユニコードにマッチすることができます!例えば。 ''Gß ".casefold()==" gss "; True' – jDo

答えて

2

コードを少し修正して解決策を思いつきました。私はこれをPython 3.5.1で実行していました。

import json 

t="QWERTYYQWERTYYY" 
tList = list() 

t_lower = t.lower() 
character_found = False 
character_count = 1 

for char in t_lower: 
    if char.isalpha(): 
     for item in tList: 
      if char in item['character']: 
       item['count'] += 1 
       character_found = True 
     if character_found: 
      character_found = False 
      continue 
     else: 
      tList.append({'character': char, 
          'count' : character_count 
          }) 
print (json.dumps(tList, indent=2, sort_keys = True)) 

輸入jsonがあるので、すばらしい出力を印刷できます。

[ 
    { 
    "character": "q", 
    "count": 2 
    }, 
    { 
    "character": "w", 
    "count": 2 
    }, 
    { 
    "character": "e", 
    "count": 2 
    }, 
    { 
    "character": "r", 
    "count": 2 
    }, 
    { 
    "character": "t", 
    "count": 2 
    }, 
    { 
    "character": "y", 
    "count": 5 
    } 
] 

編集:使用willnxの答え、私よりずっといい。ここでは、それは次のようになります。

3

これは非常にPythonicのアプローチではありません。あなたは「自分ですべてを行う」ための要件を持っていない場合:

from collections import Counter 

t="QWERTYYQWERTYYY" 
info = Counter(t) 
for char, count in info.items(): 
    print('Letter {0} occurred {1} times'.format(char, count)) 

は出力:

Letter W occurred 2 times 
Letter T occurred 2 times 
Letter R occurred 2 times 
Letter E occurred 2 times 
Letter Q occurred 2 times 
Letter Y occurred 5 times 

Counterを使用せずに、あなたは辞書を使用して、物事を簡単にすることができ;これは、それが発生した回数の値に文字のマッピングを処理します:

t="QWERTYYQWERTYYY" 
info = {} 
for char in t: 
    if char in info: 
     info[char] += 1 
    else: 
     info[char] = 1 

あなたはこの辞書をあなたの出力を生成するカウンタの例と同じように繰り返すことができます。

TL; DR

一覧はこちらを使用するために間違ったデータ構造である、あなたは辞書が欲しいです。

+0

ごめんなさい、ノービッシュなのは残念ですが、次のような場合はどういう意味ですか?info = {} – Mell0w

+0

ごめんなさい! '' 'info = {}' ''は変数 'info'を新しい辞書にバインドしています。 '{}'の使用は 'dict()'を呼び出すための並べ替えです。 I. '' 'info = {}' ''は '' 'info = dict()' '' – willnx

+0

と同じです。ありがとうございました。また、私はPythonicではないことを知っています。私の先生は、私たちがJavaの準備ができていることを望んでいるので、私たちはこのようにしています。それはまったく楽しいものではありません。 – Mell0w

1

dictと、それが簡単に作る:

t="QWERTYYQWERTYYY" 

count_dict = {} 

#initialize dict 
for char in set(t): 
    count_dict[char] = 0 

for char in t: 
    ch = ord(char) 
    if ch >=65 and ch<=90 or ch >=97 and ch <= 122: 
     count_dict[char] += 1 

print(count_dict) 

それはまだ完璧ではありません。

初期化部分は、より効率的(ループレス)にするためにリストにsetを適用し、setをカウント部分に適用してみます。

関連する問題