当前位置: 首页 > 知识库问答 >
问题:

列表的查找模式

方鸿羲
2023-03-14

我正在编写一个函数来计算一组数字的模式。

如果输入[52、99、37、86、99、99、9999、99,37、37、37],则输出应[37、99]。正如您所看到的,应该首先使用较小的数字,但我的代码不会这样做。有人能修改我的代码吗?

def mode(L):
    most = max(list(map(L.count, L)))
    return list(set(filter(lambda x: L.count(x) == most, L)))

共有3个答案

漆雕修能
2023-03-14

你在这里使它在计算上相当昂贵。一个<代码>。计数(..)需要线性时间,使得这个算法是二次的。

您可以在此使用计数器对列表执行一次遍历,然后获取最常见的元素,如:

from collections import Counter
from operator import itemgetter
from itertools import groupby

def mode(L):
    _, common = next(groupby(Counter(L).most_common(), itemgetter(1)))
    return sorted(map(itemgetter(0), common))

给定列表中的元素可以有效地散列,这将在线性时间内运行。

羊舌富
2023-03-14

< code>sorted()对列表进行排序。

def mode(L):
    most = max(list(map(L.count, L)))
    return sorted(list(set(filter(lambda x: L.count(x) == most, L))))

更新
说明:这是一种非常低效的计算模式的方法。在其他答案中还有性能更高的解决方案。这个答案狭隘地集中在OP提出的问题上。请勿在生产环境中使用此代码。
另请参阅有关此代码的其他改进的评论中的注释。

赫连瑾瑜
2023-03-14

另一种解决方案是使用< code >集合。计数器

from collections import Counter

nums = [52, 99, 37, 86, 99, 99, 99, 37, 37, 37]

c = Counter(nums)
highest_freq = max(c.values())
mod = [n for n, freq in sorted(c.items()) if freq == highest_freq]

print(mod)

输出:

[37, 99]

如果你只需要一个项目,你也可以只使用:

nums = [52, 99, 37, 86, 99, 99, 99, 37, 37, 37]
c = Counter(nums)
print(max(c))

打印内容:

99
 类似资料:
  • 给定一个项目列表,记住列表的模式是最经常出现的项目。 我想知道如何创建一个函数,可以找到列表的模式,但如果列表没有模式(例如,列表中的所有项目只出现一次),它会显示一条消息。我想在不导入任何函数的情况下制作这个函数。我正在尝试从零开始制作自己的函数。

  • 问题内容: 我需要查询以在Bigquery中查找表(表元数据)的列名,例如SQL中的以下查询: 问题答案: 更新 :现在可以!请参阅下面的文档和答案。 回答,大约在2012年: 尽管这不是第一次请求,但当前无法通过查询检索表元数据(即列名和类型)。 您有理由将其作为查询吗?表格元数据可通过表格API获得。

  • 我正在使用MongoDB搜索包含列表列表的元素,其中列表中至少有一个项目与搜索参数匹配。 这是我目前拥有的结构的一个例子。 我想搜索数据列表中值为“绿色”的所有项目。 我目前有这个: 但是,不会返回任何结果。

  • 问题内容: 需要在某种类型的查找表中放入大约1000万个值,所以我想知道列表或字典哪个更有效? 我知道你可以为这两种方法执行以下操作: 和 我的想法是,该命令将更快,更高效。 谢谢你的帮助。 编辑1 我正在尝试做的更多信息。 欧拉问题92。我正在查找表,以查看计算出的值是否已经准备好了。 编辑2 查找效率。 编辑3 没有与值相关的值…那么集合会更好吗? 问题答案: 速度 关于数据结构中的项目数,列

  • 我一直试图弄清楚如何找到一个列表的模式,而不使用排序函数,也不导入任何模块已经有一段时间了...以下是我目前掌握的情况: 如何找到如下输出:

  • 问题内容: 关于你的第一个问题:该代码非常好,并且如果与其中的一个元素相等就可以正常工作。也许你尝试查找与其中一项不完全匹配的字符串,或者你使用的浮点值会导致不准确。 关于第二个问题:如果“查找”列表中的内容,实际上有几种可能的方法。 检查里面是否有东西 这是你描述的用例:检查列表中是否包含某些内容。如你所知,你可以使用in运算符: 过滤集合 即,找到满足特定条件的序列中的所有元素。你可以为此使用