首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python定义多模态函数

Python定义多模态函数
EN

Stack Overflow用户
提问于 2020-03-02 01:17:17
回答 3查看 266关注 0票数 1

我不需要创建一个可以判断以下情况的函数:

  • 没有模式
  • 有1模式
  • 如果是多模列表

我得到了前2分的掩护:

代码语言:javascript
复制
lista = [1,2,2,3,3,4]
contador = {}

for i in lista:
    cuenta = lista.count(i)
    contador[i] = cuenta

maximo =(0)
moda = [0]

for i in contador:
    if(contador[i]>maximo):
        maximo = contador[i]
        moda = i
        freq = contador[i]


if maximo == 1:
    print("There is no mode")
else:
    print ("Mode is: %d, with a frequency of: %d" % (moda, freq))

但我很难找到一种方法来定义一个列表是否是多式联运的。我想先定义哪个频率是最高的,然后检查contador,取出下面的所有频率,但它似乎行不通:

代码语言:javascript
复制
for i in contador:
    if contador[i] < max:
        delete = [i]
        del contador[delete]

对怎么做有什么想法吗?

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-03-09 17:37:28

代码语言:javascript
复制
def moda(x):
    input_string = input("Lista de numeros separados por un espacio: ")
    lista = input_string.split()
    contador = {}
    for i in lista:
        cuenta = lista.count(i)
        contador[i] = cuenta
    maximo =(0)
    for i in contador:
        if(contador[i]>maximo):
            maximo = contador[i]
        modas = {}
        for i in contador:
            if contador[i] == maximo:
                modas[i] = contador[i]
    if maximo == 1:
        return("No hay modas")
    elif len(modas)>1:
        return ("Las modas y sus frecuencias son:")
        return (modas)
    else:
        return ("la moda y su frecuencia es:")
        return (modas)
票数 1
EN

Stack Overflow用户

发布于 2020-03-02 01:33:06

对于多修饰符,您需要检查最大频率和计数频率计数。如果它是1,那么就意味着没有模式,超过1,也就是1,那么就有1模式,i频率计数大于1,并且有多个值,有相同的计数,那么它是多个数列。

代码语言:javascript
复制
lista = [1,2,3,3,4]

res  = {}
for i in lista:
    if i not in res.keys():
        res[i]=1
    else:
        res[i]+=1
freq = res.values()
max_freq = max(freq)
if max_freq==1:
    print('no mode')
else:
    key = ''
    if list(freq).count(max_freq)==1:
        for k, v in res.items():
            if v==max_freq:
                print('mode is {}, frequency is {}'.format(k, max_freq))
                break
    else:
        print('multimodeal')
        for k, v in res.items():
            if v==max_freq:
                print('mode is {}, frequency is {}'.format(k, max_freq))
票数 1
EN

Stack Overflow用户

发布于 2020-03-02 01:43:04

对现有代码最简单的修改如下:

代码语言:javascript
复制
maximo = 0
moda = []

for i in contador:
    if(contador[i] > maximo):
        maximo = i
        freq = contador[i]
        moda = []
    if(contador[i]==freq):
        moda.append(i)

并将最后的print更改为:

代码语言:javascript
复制
print ("Mode is: %s, with a frequency of: %d" % (moda, freq))

整个过程通过库函数进行了简化:

代码语言:javascript
复制
from collections import Counter

lista = [1, 2, 2, 3, 3, 4]

contador = Counter(lista)
# get the second part (the count) from the first element of the first most common element
freq = contador.most_common(1)[0][1]
# get all the x's for which the count is freq
moda = [x for x, c in contador.items() if c == freq]

if freq == 1:
    print("There is no mode")
else:
    print("Mode is: %s, with a frequency of: %d" % (moda, freq))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60481381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档