列表Python的模式

2024-07-04 17:11:06 发布

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

我试图编写自己的函数来查找列表的模式,但当存在多个模式时,它会发出“啪啪”声。有人能帮我在处理多模式情况的函数中添加一些东西吗。提前谢谢!在

def ModeList(nums):
    subscript = 0
    while subscript < len(nums):
        if nums.count(nums[subscript]) > nums.count(nums[subscript + 1]):
            return "The mode is " + str( nums[subscript] ) + "."
        else:
            subscript += 1

print ModeList( [2,4,6,8,6,8] )

Tags: the函数列表lenreturnifmodedef
1条回答
网友
1楼 · 发布于 2024-07-04 17:11:06

最简单的方法是使用^{}

from collections import Counter

def ModeList(lst):
    return Counter(lst).most_common(1)[0][0]

演示:

^{pr2}$

如果需要所有值,则添加itertools.groupby()

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

def ModeList(lst):
    counts = Counter(lst)
    grouped = groupby(counts.most_common(), itemgetter(1))
    return [i[0] for i in next(grouped)[1]]

演示:

>>> from collections import Counter
>>> from itertools import groupby
>>> from operator import itemgetter
>>> 
>>> def ModeList(lst):
...     counts = Counter(lst)
...     grouped = groupby(counts.most_common(), itemgetter(1))
...     return [i[0] for i in next(grouped)[1]]
... 
>>> ModeList( [2,4,6,8,6,8] )
[8, 6]

如果不导入,请使用字典跟踪计数,然后按值排序:

def ModeList(lst):
    counts = {}
    for item in lst:
        counts[item] = counts.get(item, 0) + 1
    return sorted(counts, key=counts.get, reverse=True)[0]

或列表:

def ModeList(lst):
    counts = {}
    for item in lst:
        counts[item] = counts.get(item, 0) + 1
    bycount = sorted(counts, key=counts.get)
    result = [bycount.pop()]
    while counts and counts[bycount[-1]] == counts[result[0]]:
        result.append(bycount.pop())
    return result

相关问题 更多 >

    热门问题