如何编写一个函数,找到列表的众数并将其保存为字典?

3

我需要帮助编写一个函数 findMode(aList),它接受一个项目列表作为参数,并查找众数。然而,你的Python解决方案必须使用字典来跟踪项目及其计数,作为查找模式的方法(而不是并行列表)。

这是我已经尝试过的代码:

def findMode(aList):
    aList.sort()
    position = 0
    largestCount = 0
    listLength = len(aList)
    while(position <= listLength):
        count = aList.count(aList[position])
        if(count > largestCount):
            largestCount = count
            valuePosition = aList[position]
        position += count
    return aList[valuePosition]

以下是所期望的结果示例:

以下是一些关于IT技术的实例:

>>> findMode([4,3,4,3,2,1,4,5,3,3,4,5,1,4,1,4,5])
[4]
>>> findMode(["horse ", "cat ", "dog ", "turtle ","horse ", "cat ", "dog ", "turtle "])
['horse ', 'cat ', 'dog ', 'turtle ']
4个回答

4
这应该能解决问题:
from collections import Counter

def findMode(aList):
    counter = Counter(aList)
    max_count = max(counter.values())
    return [item for item, count in counter.items() if count == max_count]

1
你比我快了大约30秒! - Joshua Nixon
2
我也是。 :-) 我已经复制了它。 - erip

0

您可以使用Counter字典中的most_common()函数来获取列表的众数:

import collections
from collections import Counter

num_count = ["horse ", "cat ", "dog ", "turtle ","horse ", "cat ", "dog ", "turtle "]  

count_dict = Counter(num_count)
out = count_dict.most_common() 
out_lst = list(map(lambda x: x[0], out))

输出

['horse ', 'cat ', 'dog ', 'turtle ']

0
from collections import defaultdict
def findMode(aList):
    dic = defaultdict(int)
    for i in aList:
        dic[i]+=1
    mv = max(dic.values())
    return [i for i in dic if dic[i]==mv]

findMode([4,3,4,3,2,1,4,5,3,3,4,5,1,4,1,4,5])
# output [4]

findMode(["horse ", "cat ", "dog ", "turtle ","horse ", "cat ", "dog ", "turtle "])
# output ['horse ', 'cat ', 'dog ', 'turtle ']

1
你第一个列表的“output”似乎不正确。 :-) - erip

0
def findMode(aList):
  dic_freq = {}
  for element in aList:
    if element not in aList.keys():
      dic_freq[element] = 1
    else:
      dic_freq[element] += 1

  mode = [el for el in dic_freq.keys() if dic_freq[el] == max(dic_freq.values())]
  return mode

你可以不用字典,但这样做会更快


你可以使用 defaultdict 来避免这个 if element not in aList.keys(): dic_freq[element] = 1 - sahasrara62

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接