簡體   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