繁体   English   中英

程序打印总和最高的数字

[英]Program print numbers which sum is highest

通过列表编程 go 并打印数字总和最高的数字。 我有一个想法,获取数字并将其保存到列表中,并对下一个数字执行相同的操作,但在其他列表中。然后比较这两个列表并打印具有最高列表的数字。

我尝试了一些东西,但它没有按照我想要的方式工作。

brojevi = [21, 35, -43, 2, 80, -1, 7, 0]

tmax = []
tmax2 = []

for i in brojevi:
    broj1 = i
    broj2 = i +1
    while broj1 > 0:
        cifra1 = broj1 % 10
        tmax.append(cifra1)
        broj1 //= 10
        print(cifra1)
        print(broj1)
    print("-----------------")
    while broj2 > 0:
        cifra2 = broj2 % 10
        tmax2.append(cifra2)
        broj2 //= 10
        print(cifra2)
        print(broj2)
    print("-----------------")

zbir1 = sum(tmax)
print("-----------------")
zbir2 = sum(tmax2)
print(zbir1)
print(zbir2)
if zbir1 > zbir2:
    print("najveci: ", i)
print(tmax)
print(tmax2)

代码中的打印用于测试目的。

我没有问题实际上你能解释一下你的意思是“

通过列表编程 go 并打印数字具有最高和的数字。 “举个例子让我帮你。

brojevi = [21, 35, -43, 2, 80, -1, 7, 0] # see https://stackoverflow.com/a/14940026/1701600 def sum_digits(n): s = 0 while n: s += n % 10 n //= 10 return s max_cross_sum = -1 max_num = None for num in brojevi: cross_sum = sum_digits(num) if cross_sum > max_cross_sum: max_cross_sum = cross_sum max_num = num print(f"max cross sum is ${max_cross_sum} for number ${max_num}")

我将构建一个包含每个数字和原始数字之和的元组的新列表。 然后您可以从此列表中获得最大总和。 最后遍历列表,比较元组中的总和是否等于最大总和,然后打印匹配值。

brojevi = [21, 35, -43, 2, 80, -1, 7, 0]
totals = [(sum(int(digit) for digit in str(number) if digit.isdigit()), number) for number in brojevi]
print(totals)
max_sum = max(totals, key=lambda x: x[0])[0]
print(max_sum)
for entry in totals:
    if entry[0] == max_sum:
        print(f'Highest number is {entry[1]}')

Output(包括调试输出):

[(3, 21), (8, 35), (7, -43), (2, 2), (8, 80), (1, -1), (7, 7), (0, 0)]
8
Highest number is 35
Highest number is 80

这种方法只考虑数字。 “-”被删除。

使用 sum_digits3 function 从Sum the numbers of a number

import numpy as np 

def sum_digits3(n):
    r = 0
    while n:
        r, n = r + n % 10, n // 10
    return r

brojevi = [21, 35, -43, 2, 80, -1, 7, 0]

sumed_brojevi = [sum_digits(abs(n)) for n in brojevi]
brojevi[np.argmax(sumed_brojevi)]

您可以使用最大 function 的关键参数。 这将允许您通过提供带有 lambda (或函数)的 key 参数来获取具有最高数字总和的数字,以获取单个数字数字的总和:

brojevi = [21, 35, -43, 2, 80, -1, 7, 0]

result = max(brojevi,key=lambda n:sum(map(int,str(abs(n))))) # 35
  • str(abs(n))将数字n转换为字符串(不带符号)
  • map(int,...)将字符串的每个字符转换为 integer
  • sum(...)将把 map() 产生的整数相加,给出数字的总和
  • max(brojevi,key=lambda n:...)将在 brojevi 中找到具有最高键值的数字(在这种情况下为数字总和)

如果要查找所有数字之和最大的数字(在您的示例中,它们是3580 ),您可以使用字典根据其数字之和存储数字。

d ={}
for num in brojevi:
    d.setdefault(sum(map(int,str(abs(num)))), []).append(num)
out = d[max(d)]
print(out)

Output:

[35, 80]

尝试 max() 方法 newlist = max(yourlist) print(newlist)

如果你想获得最大值的索引

inlistmaxvalue = yourlist.index(newlist)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM