对于给定的4个数字作为该函数的参数,我必须找到所有数字组合的最大频率数字?

问题描述 投票:1回答:3

例如1234,4566,654,987;我们看到,我们有4个和6个频率都为3。因此,我们将输出为6,因为它是较大的输出。因此,我认为解决方案的代码是:

def MaxDigit(input1,input2,input3,input4):
    arr=[input1,input2,input3,input4]
    k=0
    for i in range(1,10):
        ask=[0]*i
    for j in range(0,4):
        while arr[j]!=0:
            k=int(arr[j]%10)
            arr[j]=int(arr[j]/10)
            ask[k]+=1

因此,在此之后,我们将得到列表,其中编号为索引,频率为带值。我可以进一步编码。但是它显示了最后一行,即ask [k] + = 1的索引超出范围错误,我无法猜测,为什么这样显示。请帮我解决一下这个。如果也有其他代码,请帮助我。

python list index-error frequency-analysis indexoutofrangeexception
3个回答
1
投票
input = [234,4566,654,987]
digits = [int(n) for num in input for n in str(num)] # extracts each digit separately into a list as in [2, 3, 4, 4, 5, 6, 6, 6, 5, 4, 9, 8, 7]

根据您的条件,首先根据值的递减顺序,然后根据递减顺序或键,来生成频率字典并对字典进行排序。

digit_count = {i:digits.count(i) for i in set(digits)} 
digit_count_sorted = sorted(digit_count.items(), key=lambda x: (-x[1], -x[0]))

digit_count_sorted[0][0] #prints the answer 6

您可以将其实现为功能:

def MaxDigit(input):
    digits = [int(n) for num in input for n in str(num)]
    digit_count = {i:digits.count(i) for i in set(digits)} 
    digit_count_sorted = sorted(digit_count.items(), key=lambda x: (-x[1], -x[0]))
    return digit_count_sorted[0][0]

print(MaxDigit([234,4566,654,987])

输出:

6

1
投票

尝试一下:

def MaxDigit(input1,input2,input3,input4):
    s = '{}{}{}{}'.format(input1,input2,input3,input4)
    maxCount = 0
    maxDigit = 0
    for digit in range(10):
        count = s.count(str(digit))
        if maxCount <= count:
            maxCount = count
            maxDigit = digit
    return maxDigit

1
投票

实现此目的的一种方法是使用Counter,将所有数字转换为字符串并计算数字。然后,您可以从计数器中找到最大计数并返回具有该计数的最大值:

Counter

输出:

from collections import Counter

def MaxDigit(*args):
    counts = Counter(''.join(str(a) for a in args))
    maxcount = counts.most_common(1)[0][1]
    return int(max(v for v, c in counts.items() if c == maxcount))

print(MaxDigit(1234,4566,654,987))

作为查找最大计数并对其进行过滤的替代方法,您可以对按计数递减的6 进行排序,然后键入键,然后返回第一个值的键:

Counter
© www.soinside.com 2019 - 2024. All rights reserved.