计算列表中最常用的单词

时间:2017-03-18 20:53:20

标签: python loops for-loop count

我正在尝试构建一个程序,如果用户输入名称,它将返回具有该名称的人数。如果他们键入“大多数”,则会返回最常用的名称。我以某种方式得到了计算个别单词的部分,但我不确定如何使程序定义并计算最常出现的单词。

import re
from collections import Counter

data = ('Billy Bob', 'Misty', 'Leroy', 'Leroy', 'Leroy', 'Billy Bob', 'Betty Sue',
        'Billy Bob', 'Betty Sue', 'Misty', 'Betty Sue', 'Betty Sue',
        'Misty', 'Betty Sue', 'Horace', 'Misty', 'Betty Sue', 'Misty',
        'Leroy', 'Betty Sue', 'Misty', 'Doug', 'Misty', 'Wilma', 'Jesse',
        'Misty', 'Billy Bob', 'Betty Sue', 'Betty Sue', 'Leroy', 'Misty',
        'Leroy', 'Jesse Jr', 'Betty Sue', 'Betty Sue', 'Misty', 'Misty',
        'Misty', 'Betty Sue', 'Misty', 'Misty', 'Misty', 'Leroy', 'Leroy',
        'Bailey', 'Peggy', 'Leroy', 'Billy Bob', 'Leroy', 'Leroy', 'Misty',
        'Paris', 'Leroy', 'Leroy', 'Misty Mae', 'Leroy', 'Misty', 'Leroy',
        'Bart', 'Big Daddy', 'Betty Sue', 'Billy Bob', 'Betty Sue',
        'LeeAnne', 'Billy Bob', 'Leroy', 'Betty Sue', 'Leroy', 'Betty Sue',
        'Misty', 'Rowdy', 'Billy Bob', 'Ricky', 'Misty', 'Billy Bob', 'Billy
        Bob', 'Billy Bob', 'EvaSue', 'Mark', 'Betty Sue', 'Leroy', 'Betty
        Sue', 'Billy Bob', 'Leroy', 'Leroy', 'Billy Bob', 'Billy Bob',
        'Billy Bob', 'Billy Bob', 'Billy Bob', 'Misty', 'Rob', 'Betty Sue',
        'SuelySue', 'Billy Bob', 'Misty', 'Betty Sue', 'Misty', 'Billy Bob',
        'Betty Sue', 'Leroy', 'Misty', 'Billy Bob', 'Misty', 'Misty', 'Billy
        Bob', 'Billy Bob', 'Billy Bob', 'Billy Bob', 'Leroy', 'Jesse Jr Jr',
        'Billy Bob', 'Grady', 'Leroy', 'Billy Bob', 'Leroy', 'Billy Bob',
        'Betty Sue', 'Billy Bob', 'Misty', 'Louise', 'Leroy', 'Betty Sue',
        'Leroy', 'Betty Sue', 'Leroy', 'Betty Sue', 'Betty Sue', 'Billy
        Bob', 'Leroy', 'Jenny Jae', 'Misty', 'Betty Sue', 'Billy Bob',
        'Leroy', 'Billy Bob', 'Jesse', 'Misty', 'Misty', 'Leroy', 'Betty
        Sue', 'BJ', 'Misty', 'Leroy', 'Boris', 'Misty', 'Billy Bob', 'Pegs',
        'Misty', 'Leslie', 'James', 'Melvin', 'Misty', 'Betty Sue', 'Mary
        Beth', 'Billy Bob', 'Betty Sue', 'Billy Bob', 'Misty', 'Betty Sue',
        'Leroy', 'Billy Bob', 'Billy Bob', 'BethAnne', 'Leroy', 'Betty Sue',
        'Bett', 'Billy Bob', 'Misty', 'Misty', 'Billy Bob', 'Leroy', 'Billy
        Bob', 'Billy Bob', 'Misty', 'Billy Bob', 'Raina', 'Betty Sue',
        'Misty', 'Misty', 'Misty', 'Betty Sue', 'Mikey', 'Betty Sue', 'Billy
        Bob', 'Misty', 'Betty Sue', 'Leroy', 'Betty Sue', 'Billy Bob',
        'Betty Sue', 'Billy Bob', 'Betty Sue', 'Louise Jr', 'Billy Bob',
        'Misty', 'Leroy', 'Leroy', 'Billy Bob', 'Billy Bob', 'Misty',
        'Leroy', 'Leroy', 'Leroy', 'Billy Bob', 'Betty Sue', 'Billy Bob',
        'Betty Sue', 'Misty', 'Betty Sue', 'Betty Sue', 'Misty', 'Betty
        Sue', 'Horace', 'Misty', 'Betty Sue', 'Misty', 'Leroy', 'Betty Sue',
        'Misty', 'Doug', 'Misty', 'Wilma', 'Jesse', 'Misty', 'Billy Bob',
        'Betty Sue', 'Betty Sue', 'Leroy', 'Misty', 'Leroy', 'Jesse Jr',
        'Betty Sue', 'Betty Sue', 'Misty', 'Misty', 'Misty', 'Betty Sue',
        'Misty', 'Misty', 'Misty', 'Leroy', 'Leroy', 'Bailey', 'Peggy',
        'Leroy', 'Billy Bob', 'Leroy', 'Leroy', 'Misty', 'Paris', 'Leroy',
        'Leroy', 'Misty Mae', 'Leroy', 'Misty', 'Leroy', 'Bart', 'Big
        Daddy', 'Betty Sue', 'Billy Bob', 'Betty Sue', 'LeeAnne', 'Billy
        Bob', 'Leroy', 'Betty Sue', 'Leroy', 'Betty Sue', 'Misty', 'Rowdy',
        'Billy Bob', 'Ricky', 'Misty', 'Billy Bob', 'Billy Bob', 'Billy
        Bob', 'EvaSue', 'Mark', 'Betty Sue', 'Leroy', 'Betty Sue', 'Billy
        Bob', 'Leroy', 'Leroy', 'Billy Bob', 'Billy Bob', 'Billy Bob',
        'Billy Bob', 'Billy Bob', 'Misty', 'Rob', 'Betty Sue', 'SuelySue',
        'Billy Bob', 'Misty', 'Betty Sue', 'Misty', 'Billy Bob', 'Betty
        Sue', 'Leroy', 'Misty', 'Billy Bob', 'Misty', 'Misty', 'Billy Bob',
        'Billy Bob', 'Billy Bob', 'Billy Bob', 'Leroy', 'Jesse Jr Jr',
        'Billy Bob', 'Grady', 'Leroy', 'Billy Bob', 'Leroy', 'Billy Bob',
        'Betty Sue', 'Billy Bob', 'Misty', 'Louise', 'Leroy', 'Betty Sue',
        'Leroy', 'Betty Sue', 'Leroy', 'Betty Sue', 'Betty Sue', 'Billy
        Bob', 'Leroy', 'Jenny Jae', 'Misty', 'Betty Sue', 'Billy Bob',
        'Leroy', 'Billy Bob', 'Jesse', 'Misty', 'Misty', 'Leroy', 'Betty
        Sue', 'BJ', 'Misty', 'Leroy', 'Boris', 'Misty', 'Billy Bob', 'Pegs',
        'Misty', 'Leslie', 'James', 'Melvin', 'Misty', 'Betty Sue', 'Mary
        Beth', 'Billy Bob', 'Betty Sue', 'Billy Bob', 'Misty', 'Betty Sue',
        'Leroy', 'Billy Bob', 'Billy Bob', 'BethAnne', 'Leroy', 'Betty Sue',
        'Bett', 'Billy Bob', 'Misty', 'Misty', 'Billy Bob', 'Leroy', 'Billy
        Bob', 'Billy Bob', 'Misty', 'Billy Bob', 'Raina', 'Betty Sue',
        'Misty', 'Misty', 'Misty', 'Betty Sue', 'Mikey', 'Betty Sue', 'Billy
        Bob', 'Misty', 'Betty Sue', 'Leroy', 'Betty Sue', 'Billy Bob',
        'Betty Sue', 'Billy Bob', 'Betty Sue', 'Louise Jr', 'Billy Bob',
        'Misty', 'Leroy', 'Leroy', 'Billy Bob', 'Billy Bob', 'Betty Sue')

print('''Welcome to the White Valley Name Counter. Enter a name, or "most" to see what name is the most used in this great city!''')

print()
keepgoing = 'y'

while keepgoing == 'y':
    count = 0
    search = input("What name do you want to search for in White Valley database? ")
    print()
    data_list = list(data)
    if search != "most":
        print("There are {} people named {}".format(data_list.count(search),search))
        print()
    elif search == "most":
        print("{} is the most common. There are {} of them".format(
                data_list.count.most_common(data_list), search))
    keepgoing = input('''Want to search another name ("y" for yes)? ''')
    print()

我试图使输出看起来像这样:

Welcome to the White Valley Name Counter. Enter a name, or "most" to see what name is the most used in this great city!

What name do you want to search for in White Valley database? john

There are 0 people named john

Want to search another name ("y" for yes)? y

What name do you want to search for in White Valley database? Betty Sue

There are 79 people named Betty Sue

Want to search another name ("y" for yes)? y

What name do you want to search for in White Valley database? most

Billy Bob is most common. There are 93 of them

Want to search another name ("y" for yes)? n

2 个答案:

答案 0 :(得分:1)

很好地计算用户指定的名称出现的次数非常简单!

让我们编写一个小函数来处理它并返回结果。

names = ("billy","bob","pete","bob",'pete','bob');


def count_my_name(name):
    return ("The name %s occurs %s times." % (name,str(names.count(name))));

如果我们使用名称pete打印此结果,我们将得到以下结果:

The name pete occurs 2 times.

现在,为了计算列表中最常见的名称,我们可以编写另一个简洁的小函数来处理它并为我们返回结果。

names = ("billy","bob","pete","bob",'pete','bob');
def get_most_common_name():
    all_names = set(names);
    most_common = max([names.count(i) for i in all_names]);
    for name in all_names:
        if names.count(name) == most_common:
            return ("The most common name is %s occuring a total of %s times." % (name,str(most_common)));

这会给我们带来结果:The most common name is bob occuring a total of 3 times.

好的,现在对我们的第二个功能有一些解释,我们在这里做了什么?

首先我们抓取名为name的元组,它中有名称,但其中有些是重复的,我们不想多次迭代同一个名字。 因此,创建一个名为all_names的新变量,并从该列表中创建一个集合。

集很有用,因为它们会为我们删除任何重复项。

现在我们可以使用以下命令计算名称在名称中出现的次数:

most_common = max([names.count(i) for i in all_names]);

这为我们提供了元组中最多出现的名称的编号。 这将是3。

现在我们只是迭代我们的集合all_names并计算名称出现的次数。

如果名称与我们的most_common变量一样多次出现,我们的名称最多。

希望这有帮助!

答案 1 :(得分:0)

您可以使用计数器:

import collections

data = ('Billy Bob', 'Misty', …)
counts = collections.Counter(data)

# add an additional 'Misty'
counts.update(['Misty'])

# most seen name
if counts:
    name, count = counts.most_common(1)[0]
    print("most common name is {} with a count of {}".format(name, count))
else:
    print("no names available")

name = "Billy Bob"
count = counts.get(name)
if count is not None:
     print("There are {} people named {}".format(count, name))
else:
     print("There is no {}".format(name))
相关问题