所以基本上就像标题所说,我试着计算字母出现在字符串中的次数。在计算它们之后,我希望它们打印字母在列表中显示的各自数字的次数。
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 :(得分:3)
这不是一种非常Pythonic的方法。如果您没有要求自己做所有事情,那么#34;然后:
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 强>
列表是在这里使用的错误数据结构,你想要一本字典。
答案 1 :(得分: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的答案,比我的更好。
答案 2 :(得分: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
应用于计算部分。