[英]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,...)
將字符串的每個字符轉換為 integersum(...)
將把 map() 產生的整數相加,給出數字的總和max(brojevi,key=lambda n:...)
將在 brojevi 中找到具有最高鍵值的數字(在這種情況下為數字總和)如果要查找所有數字之和最大的數字(在您的示例中,它們是35
和80
),您可以使用字典根據其數字之和存儲數字。
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.