質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

3回答

8469閲覧

入力した単語リストのアルファベットカウント

hmgien1469

総合スコア11

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

1クリップ

投稿2018/08/06 06:33

カラのリストとa:0,b:0とアルファベットが登録された辞書があります。
入力された英単語のアルファベット数をカウントして
以下のように連続して表示したいです。
今のところきちんとカウントできません。
コードの改良等で解決は可能でしょうか。

['eopt', 'fjwiwjjvko', 'rogjoej']
aが0個ありました
bが0個ありました
cが0個ありました
.
.
.
zが0個ありました

python

1list=[] 2alphabet = dict.fromkeys("\ 3abcdefghijklmnopqrstuvwxyz",0) 4 5while True: 6 word=input('英単語を入力してください') 7 if word=='': 8 break 9 list.append(word) 10list.sort() 11print(list) 12 13for i in alphabet: 14 countable=list.count(alphabet[i]) 15 print(f'{i}{countable}個ありました')

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

list.count(alphabet[i])だとリストの要素を数えてしまうので、各文字列に対してカウントする必要があります。

各要素のカウントを足し合わせて合計してもいいですし、先に文字列を連結してしまうのも手です。

python

1list=[] 2alphabet = dict.fromkeys("\ 3abcdefghijklmnopqrstuvwxyz",0) 4 5while True: 6 word=input('英単語を入力してください') 7 if word=='': 8 break 9 list.append(word) 10list.sort() 11print(list) 12 13s = "".join(list) 14for c in "abcdefghijklmnopqrstuvwxyz": 15 countable=s.count(c) 16 print(f'{c}{countable}個ありました')

listという変数名は組み込みのlistクラスを上書きしてしまうので、避けるようにしてください。

投稿2018/08/06 06:40

編集2018/08/06 06:43
hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hayataka2049

2018/08/06 06:41

これだと辞書にした意味がないですね・・・
hmgien1469

2018/08/06 09:24

すごい!こちらも、よりシンプルに解決できる方法ですね。 回答いただきありがとうございました。
guest

0

dictなので、順序性を保証していないような。
alphabet順に表示する必要はありますか?

Python

1# -*- coding: utf-8 -*- 2from collections import Counter 3 4 5def main(): 6 alphabet = Counter() 7 while True: 8 word = input('英単語を入力してください') 9 if word == '': 10 break 11 alphabet.update(*word.split()) 12 13 for key, num in alphabet.items(): 14 print(f'{key}{num}個ありました') 15 16 17if __name__ == "__main__": 18 main() 19

OrderedDictCounterを使った順序性を保証するコードです。

Python

1# -*- coding: utf-8 -*- 2from collections import Counter, OrderedDict 3from string import ascii_letters 4 5class OrderedCounter(Counter, OrderedDict): 6 pass 7 8def main(): 9 alphabet = OrderedCounter(OrderedDict.fromkeys(ascii_letters, 0)) 10 while True: 11 word = input('英単語を入力してください') 12 if word == '': 13 break 14 alphabet.update(*word.split()) 15 16 for key, num in alphabet.items(): 17 print(f'{key}{num}個ありました') 18 19 20if __name__ == "__main__": 21 main()

◇参考情報
8.3.6. OrderedDict オブジェクト
string.ascii_lowercase
Creating an Ordered Counter

投稿2018/08/06 08:02

編集2018/08/06 08:33
umyu

総合スコア5846

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hmgien1469

2018/08/06 09:17

時間かかったけど理解できました。 初心者故に知ってる知識だけで対応してました。 alphabet順がベストでした。 ありがとうございます。
guest

0

ベストアンサー

hayataka2049さんの回答の方がスマートだと思いますが、別解も示しておきます。
一応、辞書を活かした形にしてみました。

Python

1list = [] 2alphabet = dict.fromkeys("\ 3abcdefghijklmnopqrstuvwxyz", 0) 4 5while True: 6 word = input('英単語を入力してください') 7 if word == '': 8 break 9 list.append(word) 10list.sort() 11print(list) 12 13for w in list: 14 for c in w: 15 try: 16 alphabet[c] += 1 17 except KeyError: 18 pass 19 20for k, v in alphabet.items(): 21 print(f'{k}{v}個ありました')

投稿2018/08/06 07:20

shiron46

総合スコア111

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hmgien1469

2018/08/06 09:19

改良の知恵をいただき、ありがとうございます。 forの二重の使い方がまだよくわからないけど、理解していきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問