程式遍歷串列并列印數字總和最高的數字。我有一個想法,獲取數字的位數并將其保存到串列中,然后對下一個數字但在其他串列中執行相同的操作。然后比較這兩個串列并列印具有最高串列的數字。
我嘗試了一些東西,但它不按我想要的方式作業。
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)
代碼中的列印用于測驗目的。
uj5u.com熱心網友回復:
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}")
uj5u.com熱心網友回復:
我會用包含每個數字和原始數字之和的元組構建一個新串列。然后你可以從這個串列中得到最大和。最后迭代串列,比較元組中的總和是否等于最大總和,然后列印匹配值。
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]}')
輸出(包括除錯輸出):
[(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
這種方法只考慮數字。“-”被洗掉。
uj5u.com熱心網友回復:
您可以使用 max 函式的關鍵引數。這將允許您通過提供帶有 lambda(或函式)的關鍵引數來獲得具有最高數字總和的數字,以獲得單個數字數字的總和:
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,...)將字串的每個字符轉換為整數sum(...)將 map() 產生的整數相加,給出數字的總和max(brojevi,key=lambda n:...)將在 brojevi 中找到具有最高鍵值的數字(在本例中為數字總和)
uj5u.com熱心網友回復:
使用 Sum_digits3 函式對數字的數字求和
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)]
uj5u.com熱心網友回復:
如果要查找所有數字總和最大的數字(在您的示例中,它們是35和80),您可以使用字典根據數字總和來存盤數字。
d ={}
for num in brojevi:
d.setdefault(sum(map(int,str(abs(num)))), []).append(num)
out = d[max(d)]
print(out)
輸出:
[35, 80]
uj5u.com熱心網友回復:
嘗試max()方法
newlist = max(yourlist)
print(newlist)
如果你想獲得最大值的索引比
inlistmaxvalue = yourlist.index(newlist)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/382193.html
上一篇:在R中將串列轉換為陣列
下一篇:Python串列復制指向同一地址
