让我们说我试图获得不同人名的数量。用户输入名称,直到输入-1,一旦输入-1,则循环将中断
一旦进入,我就会尝试将输出列表为此类
姓名:John Max Joan
没有发生:4 1 2
发生率:20%10%30%
#!/usr/bin/python
names = ["John","Max","Joan"]
lst = []
while True:
lst = raw_input("What is your name?")
if lst == "-1":
break
input_list = lst.split()
print "Names" '[%s]' % ' '.join(map(str, names))
我不知道如何使用用户输入的次数增加名称的值 - 让我们说用户输入john,john,max,joan joan joan然后我需要增加john两次,最多一次和joan 3次。
我知道我可以使用[0]引用名称的不同部分,例如这是第一项,但我不知道如何增加所有相关部分。
答案 0 :(得分:1)
您可以使用collections.Counter
来计算和累积给定输入中名称的出现次数:
counter = collections.Counter()
names = ["John", "Max", "Joan"]
while True:
lst = raw_input("What is your name?")
if lst == "-1":
break
lst = [name for name in lst.strip().split() if name in names]
names.update(collections.Counter(lst))
print "names : {}".format(" ".join(names))
print "No of occurrences : {}".format(" ".join(map(str, names.values())))
请注意,我推测名称在输入中用空格分隔。
答案 1 :(得分:0)
计算多字符串中的字频率:
import sys
from collections import defaultdict
WORDS = """Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed
do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim
ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
ex ea commodo consequat."""
d = defaultdict(lambda: 0)
for word in WORDS.split():
d[word] += 1
for key in ['in', 'et', 'ut', 'sed']:
print(key, ':\t', str(d[key]))
输出:
in : 0
et : 1
ut : 2
sed : 1
是否将单词规范化为小写取决于问题域;如果提问者想要用他收到的名字这样做,那就是data[word.lower()] += 1
在循环中,然后如果他愿意的话,他可以重新把输出的第一个字母大写。