字的最大频率值

时间:2018-10-20 08:52:40

标签: python algorithm

寻求家庭作业帮助

为我提供了一个列表,并要求其在列表中查找出现次数最多的值,并返回出现次数。这个问题相当大,我自己一个人就可以完成其他部分的工作,但这使我很困惑。我还要补充一点,这是一项作业,对任何指导都是值得的。

问题陈述:最大(单词)频率

例如,在一本书中,带有以下单词['big', 'big', 'bat', 'bob', 'book']的最大频率是2,即big是最频繁出现的单词,因此2是最大频率。

def maximum_frequency(new_list):

    word_counter = {}

    for word in new_list:

        if word in word_counter:

            word_counter[word] += 1

        else:

            word_counter[word] = 1

我已经走了这么远,但是我不确定它是否应该从这里走到哪里

5 个答案:

答案 0 :(得分:0)

尝试一下:

from collections import Counter

c = Counter(['big', 'big', 'bat', 'bob', 'book'])
max(c.items(), key=lambda x:x[1])

max将按计数返回最多的一个,您可以这样做:

key,rate = max(c.items(), key=lambda x:x[1])

key将是big,而rate将是2

也可以访问c.items()计数的所有项目。输出为

{'big': 2, 'bat': 1, 'bob': 1, 'book': 1}

编辑:

如schwobaseggl所说,从计数器中找到的最佳做法是使用most_common

c.most_common(1)[0]

答案 1 :(得分:0)

由于这听起来像是您应该进行的挑战和/或作业,因此我直接提供了一些概念,而不是直接提供代码示例。

首先,了解您是否看过单词的最好方法是使用地图,在Python中-术语是“ dict”,语法很简单{},您可以存储像这样的值:my_dict['value'] = true或您需要的任何键/值。

因此,如果您要逐一阅读您的单词,并将其存储到此字典中,那么值应该是多少?您知道您想知道最大频率,对吗?好吧,让我们将其用作我们的价值。默认情况下,如果我们添加一个单词,则应确保将其初始值设置为1(我们已经看到它一次)。如果第二次看到一个字,我们就会增加频率。

现在您有了一个充满单词及其频率的字典,也许您可​​以找出如何找到频率最高的字典?

可以这么说,您应该研究的事情是:

  • 如何确定字典中是否存在键
  • 如何修改字典中键的值
  • 如何迭代字典的键/值对

之后,您的答案应该很容易弄清楚。

答案 2 :(得分:0)

您只需要计算所有唯一元素的出现并将频率与先前计算的频率进行比较即可。

样本是单词列表。

def maxfreq(sample):
    m=0
    frequency=0
    word=''
    set_sample=list(set(sample))
    for i in range(len(set_sample)):
        c=sample.count(set_sample[i])
        if c>m:
            m=c
            frequency=m
            word=set_sample[i]
    return (frequency,word)

答案 3 :(得分:0)

尝试:

>>> MyList = ["above", "big", "above", "cat", "cat", "above", "cat"]
>>> my_dict = {i:MyList.count(i) for i in MyList}
>>> my_dict
{'above': 3, 'big': 1, 'cat': 3}

也可以使用collections.Counter与Python 2.7或3.x兼容!

>>> from collections import Counter
>>> MyList  = ['big', 'big', 'bat', 'bob', 'book']
>>> dict(Counter(MyList))
{'big': 2, 'bat': 1, 'bob': 1, 'book': 1}

如果您对Pandas开放,则可以按照以下步骤进行操作:

>>> import pandas as pd
>>> pd.Series(MyList).value_counts()
big     2
book    1
bob     1
bat     1
dtype: int64

@在评论部分what if i wanted to get just the maximum value instead of the word中回答OP的下一个问题。

>>> pd.Series(MyList).value_counts().max()
2

答案 4 :(得分:0)

如何?

def maximum_frequency(new_list):
    word_counter = {}
    for word in new_list:
        if word in word_counter:
            word_counter[word] += 1
        else:
            word_counter[word] = 1

    max_freq = max(word_counter.items(), key=(lambda x: x[1]))
    return max_freq


if __name__ == '__main__':
    test_data = ['big', 'big', 'bat', 'bob', 'book']
    print(maximum_frequency(test_data))

输出:

('big', 2)

在Python 2和3上运行良好,并以最常见单词和出现次数的元组返回结果。

编辑:

如果您根本不在乎哪个单词的计数最高,而只想要频率数字,则可以将其简化为:

def maximum_frequency(new_list):
    word_counter = {}
    for word in new_list:
       if word in word_counter:
            word_counter[word] += 1
        else:
            word_counter[word] = 1

    return max(word_counter.values())


if __name__ == '__main__':
    test_data = ['big', 'big', 'bat', 'bob', 'book']
    print(maximum_frequency(test_data))