在 python 解释中查找列表中最常见的元素? [复制]

Posted

技术标签:

【中文标题】在 python 解释中查找列表中最常见的元素? [复制]【英文标题】:Finding the most frequent element in a list in python explanation? [duplicate] 【发布时间】:2021-12-13 00:22:32 【问题描述】:

这个想法非常直截了当,只想找到最常见的元素,但我只是迷失了这个小代码 sn-p 中到底发生了什么。我喜欢这段代码不导入任何东西,只是简单地使用内置插件。但我不明白它是如何工作的。 这里是:

def most_frequent(List):
    return max(set(List), key = List.count)

w3schools 将 python max() 定义为执行以下操作:

max() 函数返回具有最高值的项目,或者 可迭代项中具有最高值的项。如果值是字符串, 按字母顺序进行比较。

到目前为止是有道理的,所以如果我们有一个像这样的列表 a_list = [3,2,5,1],那么 max(a_list) 给我们 5。好吧,很简单。

但是在我们的函数中为什么在这里使用 set 呢?我了解 set 是一种内置数据结构,可确保其中的所有数据都是唯一的。什么是关键?为什么max()里面有两个像这样的参数? 我以前从未见过这样的事情。运行诸如 max(4,2,6,3,2) 之类的东西是有道理的,但是将数据结构集放在列表中并在列表上分配一个称为 key 和调用 count 的东西?这里到底发生了什么?有人可以像我五岁那样分解这个并解释当定义只是为了找到最高值时我们如何能够像这样使用 max() 吗? set 和 key 在这里做什么?它像哈希表吗? 完全迷失在这里真的很感激帮助。

谢谢

【问题讨论】:

使用 set 是因为它消除了重复。 key 参数到max 允许您提供过滤功能;它将返回该函数具有最大值的元素,而不仅仅是该元素具有最大值的元素。这有点棘手。 注意,这个算法很糟糕,可能效率很低,不要使用它。 “w3schools 将 python max() 定义为执行以下操作”。不要去w3schools。只需转到实际文档。你看过吗?关于maxkey 参数它说了什么? @juanpa.arrivillaga 谢谢!找到最高频率的更好方法是什么? max() 的文档在哪里 @Preston_Jarvis here's the relevant docs。最好创建一个计数字典,您可以只使用collections.Counter 对象,例如counts = collections.Counter(data),然后您只需要max(counts.items(), lambda x:x[1])。以上将是线性时间 【参考方案1】:

max 文档指出 key 是一个排序函数,该方法为 iterable 的每个项目提供一个新值,该值将用于排序

无键:自然顺序

max([4, 3, 5, 6]) 
     4, 3, 5, 6    << values used for finding the max
           ^

With key : 如果值由 key 给出,则排序

max([ 4,  3,  5,  6], key=lambda x: -x) 
     -4, -3, -5, -6    << values used for finding the max
          ^

您的情况,list.count,表明2 出现 2,而且不止这些

l =[4, 2, 6, 3, 2]

max([4, 2, 6, 3], key=lambda x: l.count(x))
     1  2  1  1      << values used for max, regarding the
        ^

【讨论】:

谢谢,我还在想办法解决这个问题。 W3 是一个糟糕的资源,根本没有涵盖那个细节。一直使用 python 文档。因此,如果我理解正确, max() 可以采用单个可迭代对象(例如列表),也可以采用可迭代对象作为排序键。不是很了解订购部分,订购如何?为什么要使用 set()?这不会删除需要计数器的重复项吗? @Preston_Jarvis 对key 方法给出的值进行排序。 set 只允许在较小的值之间找到最大值,并且初始列表用于计数器,无论设置如何

以上是关于在 python 解释中查找列表中最常见的元素? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

查找字符串数组中最常见的元素 GO

如何找到列表中最常见的元素? [复制]

python查找列表中最多的值

python 返回列表中最常见的值

python 返回列表中最常见的值

python 返回列表中最常见的值