对于给定的 4 个数字作为函数的参数,我必须找到所有数字组合的最大频率的数字?
For given 4 numbers as arguments of the function, I've to find the digit with max frequency combined for all numbers?
喜欢 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 列表,其中 no.s 作为索引和带有值的频率。我可以进一步编码。
但它显示 最后一行的索引超出范围错误,即 ask[k]+=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
实现这一点的一种方法是使用 Counter
,将所有数字转换为字符串并计算数字。然后,您可以从计数器中找到最大计数和 return 具有该计数的最大值:
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
按计数降序排序,然后对键进行排序,然后对 return 第一个值的键进行排序:
def MaxDigit(*args):
counts = Counter(''.join(str(a) for a in args))
counts = sorted(counts.items(), key=lambda x:(-x[1], -int(x[0])))
return int(counts[0][0])
试试这个:
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
喜欢 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 列表,其中 no.s 作为索引和带有值的频率。我可以进一步编码。 但它显示 最后一行的索引超出范围错误,即 ask[k]+=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
实现这一点的一种方法是使用 Counter
,将所有数字转换为字符串并计算数字。然后,您可以从计数器中找到最大计数和 return 具有该计数的最大值:
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
按计数降序排序,然后对键进行排序,然后对 return 第一个值的键进行排序:
def MaxDigit(*args):
counts = Counter(''.join(str(a) for a in args))
counts = sorted(counts.items(), key=lambda x:(-x[1], -int(x[0])))
return int(counts[0][0])
试试这个:
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