计算一封信出现的次数,然后将其写入清单

时间:2016-05-03 02:36:01

标签: python list counting

所以基本上就像标题所说,我试着计算字母出现在字符串中的次数。在计算它们之后,我希望它们打印字母在列表中显示的各自数字的次数。

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列表中的相应数字上。

3 个答案:

答案 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应用于计算部分。