python:Lis的模式

2024-06-01 23:13:14 发布

您现在位置:Python中文网/ 问答频道 /正文

你能帮我解决这个python问题吗?在

编写一个Python函数all_modes(l),它接受一个非空的 列出l,并返回一对包含 模式及其频率:

所以,我的代码是:

def all_modes(l):
    d = {}
    for c in l:
        if c not in d:
            d[c] = 1
        else:
            d[c] = d[c] + 1 
    return ({c},d[c]) 

以下是它的一些运行,不幸的是,这个输出是错误的:

^{pr2}$

我怎样才能修好它?在


Tags: 函数代码inforreturnifdef错误
2条回答

你还错东西了。当您点击return语句时,c只是列表中的最后一项。你已经把它和它的计数还给你了。在

您必须返回字典才能找到最大值:

count_max = max([v for v in d.itervalues()])

然后找到具有该计数的所有列表值:

^{pr2}$

项目现在是:

def all_modes(l):
    d = {}
    for c in l:
        if c not in d:
            d[c] = 1
        else:
            d[c] = d[c] + 1

    count_max = max([v for v in d.itervalues()])
    mode_list = [k for k,v in d.iteritems() if v == count_max]

    return (mode_list, count_max)

print all_modes([5, 6, 7, 5])
print all_modes([5])
print all_modes([5, 6, 7, 5, 6])
print all_modes([5, 6, 7, 8, 9])

输出:

([5], 2)
([5], 1)
([5, 6], 2)
([8, 9, 5, 6, 7], 1)

这就是你需要的吗?在

您忘记了只返回出现次数最大化的值(模式的关键)。可能是这样吧?在

from collections import defaultdict

def modes(l):
  d = defaultdict(int)
  for num in l:
    d[num] += 1
  m = max(d.values())
  return {k for k, v in d.items() if v == m}, m  

相关问题 更多 >